Проверьте значения дубликатов в каждой строке и столбце в 2D-массиве - PullRequest
0 голосов
/ 15 мая 2019

Я читаю PDF-заметку об игре в Prolog, которая является Hitori, я пришел к следующему коду

abr([]).
abr([_]):-!.
abr([C, C|Cs]):- C \= 0, abr([C|Cs]).
abr([C1, C2|Cs]):- C1 \= C2, abr([C2|Cs]).

abs([]):- !.
abs([Cs|Css]):- abr(Cs), !, abs(Css).

ab(P):- transpose(C, Ccol), abs(C), abs(Ccol).

P arg обозначает 2D-массив и его начальное значение

-1 -1 -1 -1
-1 -1 -1 -1
-1 -1 -1 -1
-1 -1 -1 -1

Кроме того, P будет каждый раз менять свое значение, чтобы можно было проверить, можно ли заменить элемент на zero

На самом деле я не смог получить вышеуказанный код, но ядумаю, он проверяет правильность изменения элемента на zero

Так что мой вопрос в том, что делает приведенный выше код?

1 Ответ

0 голосов
/ 19 мая 2019

Во-первых, переменная предиката ab должна быть C, а не P.

Предикат ab/1 принимает в качестве входных данных квадратную матрицу целых чисел в виде:

[[0, 4, 0], [2, 0, 8], [3, 6, 9]]

Возвращает true, если в строке или столбце нет двух последовательных 0 s.Это должно иметь какое-то отношение к правилу Хитори: «черные клетки не могут быть смежными, хотя они могут быть диагонали друг к другу».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...