:- use_module(library(clpfd)).
go(Rows):-
foreach(J in 1..9, K in 1..9, Number = Rows[J,K],
Code is 0'A + Number - 1, char_code(Letter, Code), Rows[J,K] is Letter,nl)
sudoku(Rows) :-
append(Rows, Vs), Vs ins 1..9,
maplist(all_distinct, Rows),
transpose(Rows, Columns),
maplist(all_distinct, Columns),
Rows = [A,B,C,D,E,F,G,H,I],
blocks(A, B, C),
blocks(D, E, F),
blocks(G, H, I),
maplist(label, Rows),
blocks([], [], []).
blocks([A,B,C|Bs1], [D,E,F|Bs2], [G,H,I|Bs3]) :-
all_distinct([A,B,C,D,E,F,G,H,I]),
blocks(Bs1, Bs2, Bs3).
Но это решает судоку, содержащую числа от 1 до 9, мне нужно что-то сделать, чтобы преобразовать 1 в 9 в А в I
Я думаю обойти каждый элемент в сетке и, соответственно, проверить значение и заменить его соответствующим алфавитом.
Как я могу пройти и заменить числа или есть какой-то лучший способ решить эту проблему?
Ошибка:
Спасибо! : D