Fillomino - это головоломка, в которой вы заполняете сетку полиомино . Каждое полиомино представляет собой область смежных клеток. Представление сетки показывает, какой размер polyomino покрывает каждую ячейку. Например, пентомино (5) будет показано как 5
в каждой из пяти смежных клеток (см. Ниже). Два полиомино одинакового размера не могут иметь общую границу, но могут граничить по диагонали.
Для каждой загадки вы начинаете с нескольких знаков и должны заполнить оставшиеся ячейки. Простой пример головоломки и решения:
Ваша задача: Задать квадратную головоломку, решить ее и вывести ответ. Ввод может быть через стандартный ввод данных, один аргумент командной строки или текстовый файл. Ввод будет дан как целое число n
, за которым следуют n
строки n
цифр каждая. Пустые ячейки будут даны как точки ( .
). Для приведенного выше примера головоломки это будет:
5
3..66
5.4.6
.54.6
.1.6.
..312
Вывод - это решаемая головоломка, заданная по n
строкам n
цифрами, в консоль или текстовый файл:
33366
55446
55466
51462
33312
Если головоломка не действительна, выведите 0
. Головоломка может быть недействительной, если ввод неверен или нет решения. Если существует несколько решений, вы можете вывести одно или все из них.
Так как каждая ячейка представлена одной цифрой, все головоломки будут состоять только из размера полиомино 9
и под ним. Если это невозможно решить без больших полиомино, считайте его недействительным.
Правильные ответы решат любую головоломку, а не просто выводят решения для тестовых случаев. Никаких внешних ресурсов, будь то онлайн или локально. Если случается , что язык с встроенной функцией решающего fillomino, вы не можете использовать его. Короче, играй честно .
Прецедент:
Входные данные:
9
..21.3..5
.5...5..5
.1.44.334
...53.4..
2.3.3..5.
1.15.5.15
..45..1..
.24.53.53
....2....
Вывод (возможное решение):
322133315
355445555
315443334
235531444
233135551
141535515
344553155
324553553
321223133
Помните, что у некоторых полиомино нет заданных номеров, а у некоторых больше одного. Существует не отношения один-к-одному между числом данности и числом полимино.
Оценка по стандартному коду-гольфу, размер программы в байтах.
источник
Ответы:
4882 персонажа - Java
Не очень удачное решение (т. Е. 4800 символов - это много) Может быть немного лучше, потому что 1 или 2 отладочные линии печати все еще там. Я думаю, что я могу еще немного сократить с точки зрения бесполезного / оптимизированного кода.
Никогда не видя Полемино до этого, я читал о том, что они из себя представляют, и, даже не глядя на решение алгоритмов, просто придумал свои (довольно медленно).
В основном, часто использует рекурсию ... Находит неполное Поломино, пытается завершить его. Находит пустое пространство, перебирает 1-9 через все квадраты в кармане, устанавливает этот карман на это значение. Если карман заполнен, он пытается найти другой карман, а затем повторяется до конца. Я не мог заставить его работать для сетки размера 9 ... Я имею в виду, по крайней мере, одну оптимизацию, которая могла бы заставить ее работать в течение разумного времени для 9. Возможно, скоро я попытаюсь это реализовать.
источник