Эта задача вдохновлена этим приложением .
Это гораздо более простая версия этой задачи . Эта задача - код-гольф , а другая - самая быстрая .
Вам дадут квадратную сетку ввода размером 6 на 6, которая разделена на 6 областей, где ячейки каждой области имеют уникальный идентификатор ( в тексте здесь я буду использовать строчные буквы от af , но вы можете выбрать все, что вам нравится, например, целые числа 1-6 ).
Входные данные могут выглядеть следующим образом (необязательный формат ввода):
aabbbb
aabbbb
aaccbb
acccdb
ecccdb
eeefff
Или проще визуализировать:
Вызов:
Вы должны разместить 6 деревьев в этом парке в соответствии со следующими правилами:
- В каждом столбце должно быть ровно 1 дерево, а в строке - 1 дерево.
- На всех участках должно быть ровно 1 дерево.
- Ни одно дерево не может быть смежным с другим деревом по вертикали, горизонтали или диагонали.
Решение макета выше:
Примечание: есть только одно решение для каждой головоломки
Дополнительные правила:
- Форматы ввода и вывода не являются обязательными
- Например, выходные данные могут быть списком индексов, сеткой с 1/0, указывающей, есть ли в этой позиции дерево, или модифицированной версией входных данных, где указаны деревья.
- Время выполнения должно быть детерминированным
- Программа должна завершиться в течение 1 минуты на разумном современном ноутбуке
- Домовой указывает, если вы не грубой силой!
Тестовые случаи:
aabbbb
aabbbb
aaccbb
acccdb
ecccdb
eeefff
---
aAbbbb
aabbbB
aaCcbb
acccDb
Ecccdb
eeeFff
----------
aabccc
aacccc
aaddce
aeeeee
aeeefe
eeeeee
---
aaBccc
aacccC
aadDce
Aeeeee
aeeeFe
eEeeee
----------
aaaabb
aacbbb
aadddb
addeef
ddddee
dddeee
---
aaaaBb
aaCbbb
Aadddb
addeeF
dDddee
dddEee
----------
abbbcd
abebcd
addddd
dddddd
effdff
eeffff
---
abBbcd
abebCd
Addddd
dddDdd
effdfF
eEffff
Те же тесты в формате, который немного легче разобрать:
Test case 1:
[1,1,2,2,2,2;1,1,2,2,2,2;1,1,3,3,2,2;1,3,3,3,4,2;5,3,3,3,4,2;5,5,5,6,6,6]
Test case 2:
[1,1,2,3,3,3;1,1,3,3,3,3;1,1,4,4,3,5;1,5,5,5,5,5;1,5,5,5,6,5;5,5,5,5,5,5]
Test case 3:
[1,1,1,1,2,2;1,1,3,2,2,2;1,1,4,4,4,2;1,4,4,5,5,6;4,4,4,4,5,5;4,4,4,5,5,5]
Test case 4:
[1,2,2,2,3,4;1,2,5,2,3,4;1,4,4,4,4,4;4,4,4,4,4,4;5,6,6,4,6,6;5,5,6,6,6,6]
Ответы:
C
223182 байтаПринимает ввод в качестве аргумента в формате, указанном в вопросе. Записывает вывод в stdout в виде сетки 0 с 1, куда уходят деревья.
Пример вывода:
Сломать
Это адаптация моего ответа к самой быстрой версии этого вопроса . Не имеет такого большого количества коротких замыканий, но достаточно быстро для сетей 6x6.
источник
Клинго , 66 байт
Запустите с
clingo plant.lp - -c n=<n>
где<n>
размер сетки. Входной формат представляет собой списокc(X,Y,Z).
утверждений для каждой ячейки (X
,Y
) цветнойZ
, с 1 ≤X
,Y
,Z
≤n
, разделенные пробелами необязательными. Вывод включает в себяt(X,Y)
для каждого дерева в (X
,Y
).демонстрация
Чтобы упростить работу с форматом ввода / вывода, вот программы на Python, которые необходимо преобразовать в формат, указанный в задании.
вход
Вывод
источник