Я понимаю, что написал это как домашнее задание, но это потому, что для меня это самый простой способ понять и попытаться передать проблему. Это то, что я хочу решить для личного проекта.
У меня есть карты, разложенные в сетке, я начинаю с простого случая сетки 2x2, но в конечном итоге хочу иметь возможность экстраполировать на более крупные n × n сеток.
Все карточки лицевой стороной вниз, и на лицевой стороне карточек напечатано:
- положительное ненулевое целое число, представляющее «счет» карты
- или черное пятно.
Мне предоставляется информация о сумме баллов в каждом ряду, количестве черных пятен в каждом ряду, сумме баллов в каждом столбце и количестве черных пятен в каждом столбце.
Таким образом, верхний ряд должен иметь сумму очков, равную 1, и ровно одна из карт является черным пятном.
Самый правый столбец должен иметь сумму очков 2, и ровно одна из карт является черным пятном.
1025 * Etc. *
Конечно, мы видим, что приведенная выше сетка "решит" до
Теперь я хочу создать функцию, которая вводит данную информацию и создает сетку карточек, которая удовлетворяет этим ограничениям.
Я думаю, что могу использовать кортежоподобные аргументы для функции.
И тогда каждая «клетка» или карта в сетке сама является кортежем, первым элементом кортежа будет счет карты (или 0, если это черное пятно), а вторым элементом будет 1, если карта является черным пятном, или 0 в противном случае.
Так что сетка должна напоминать эту ^^
Я могу узнать, что все переменные a
, b
, решая этой системой уравнений:
(Зная также, что все эти числа являются целыми числами ≥0).
Я хотел использовать эту задачу в качестве учебного упражнения в прологе, думаю, что проблема, которую Пролог решит элегантно,
Принял ли я правильное решение или Пролог не является хорошим выбором?
Интересно, как я могу реализовать это в Прологе.