Крис, загадочный наркоман кроссвордов, имеет алгоритм задания порядка, в котором он их решает.
Мы будем использовать вышеуказанное изображение в качестве руководства.
- Крис всегда начинает с первой подсказки, в данном случае 1 через. Крис - способный кроссворд, поэтому предполагается, что он всегда будет знать ответ на ключ, над которым он работает.
- Как только Крис завершит разгадку, он проверит все подсказки, примыкающие к тем, которые он завершил (в первом случае: 1 Вниз, 2 Вниз и 3 Вниз), а затем завершит разгадку с наименьшим числом. Если нет смежных улик, он перейдет к шагу 3.
- Если подсказка такова, что у следующего числа (как описано в шаге 3) есть как подсказка, так и подсказка, он сначала завершит подсказку (100% уверенность, это граничит с ОКР!)
- Если смежных подсказок нет, он перейдет к следующей доступной подсказке, следующей по количеству (поперек или вниз)
- Повторите с шага 2, пока все подсказки не будут завершены.
И вот тут-то и дело, дорогие кодеры. Вам было поручено создать код, который после предоставления шаблона кроссворда может обеспечить вывод, описывающий порядок подсказок на основе алгоритма Криса для его решения.
Код примет ввод шаблона кроссворда в форме .
представления белого квадрата и #
представления черного квадрата.
Пример :
.....#.........
.#.#.#.#.#.#.#.
...#...#.......
.#.#.#.#.#.#.#.
....#..........
##.#.#.#.#.#.#.
......#........
.###.#####.###.
........#......
.#.#.#.#.#.#.##
..........#....
.#.#.#.#.#.#.#.
.......#...#...
.#.#.#.#.#.#.#.
.........#.....
Ввод может осуществляться через: a) чтение файла представления кроссворда или b) путем ввода строки каждой строки кроссворда, за которой \n
следует вторая, \n
указывающая EOF.
И тогда он определит метод, с помощью которого Крис решит его в соответствии с описанным выше алгоритмом.
Выходные данные должны быть в формате серии команд, разделенных запятыми, в виде n(A|D)
, где указывается n
номер ключа, за которым следует A
поперек илиD
нижняя точка.
Таким образом, в приведенном выше примере (как на изображении, так и на примере шаблона, которые являются одним и тем же), результат будет:
1A,1D,2D,3D,9A,10A,4D,5D,6D,7D,8D,11A,12A,13A,15A,14D,15D,16A,17A,18D,19D,20A,21D,23A,22D,24A,25D,27A,28A,26D,29A,30A,31A
Самый короткий код выигрывает ...
тестирование
Вы должны предоставить свой код, число байтов, а также один из четырех тестовых случаев, представленных в .
и#
формате, а также вывод , генерируемый из этого входа. Существует четыре тестовых примера, три ниже, а также приведенный выше пример шаблона.
Пример тестовых случаев:
Тестовый пример 1
.....#
.#.#.#
...#..
.#.#.#
.....#
##.#..
Выход: 1A,1D,2D,3D,4A,5A,6A,7A
Тестовый пример 2
.....#..
.#.##..#
.#....#.
...##.#.
.####...
......##
Выход: 1A,1D,2D,5A,4D,4A,3D,3A,7A,8A,6D,9A
Тестовый пример 3
.........#
#.#.#.#.#.
....#...#.
#...#.#.#.
..###.#.#.
.#....#...
.#####...#
.....###..
Выход: 1A,2D,3D,4D,5D,7A,8A,9A,10A,11A,11D,12A,13A,6D,14D,15A,16A,17A
Тестовый пример 4
.....#.........
.#.#.#.#.#.#.#.
...#...#.......
.#.#.#.#.#.#.#.
....#..........
##.#.#.#.#.#.#.
......#........
.###.#####.###.
........#......
.#.#.#.#.#.#.##
..........#....
.#.#.#.#.#.#.#.
.......#...#...
.#.#.#.#.#.#.#.
.........#.....
Выход: 1A,1D,2D,3D,9A,10A,4D,4A,5D,6D,7D,8D,11A,12A,13A,15A,14D,15D,16A,17A,18D,19D,20A,21D,23A,22D,24A,25D,27A,28A,26D,29A,30A,31A
Удачи!
17A
в конце. Также четвертый4A
сразу после4D
.Ответы:
GolfScript, 154 символа
Вклад должен быть предоставлен на STDIN. Примеры дают следующие результаты (проверьте онлайн ):
источник
votes++
Mathematica
806477(Похоже, в порядке упорядочения шагов решения проблемы. Я смотрю на это.)
Golfed
Функция
q
находит порядок решения кроссворда.Ungolfed
board
отображает кроссворд Код не включен в число символов. Несколько подфункций отq
заимствованы здесь.TestCases
1
2
3
4
источник
3A
не должно быть сразу после,2D
потому что пока нет никакой подсказки. Также другие решения показывают этот эффект.5A
имеет ключ и поэтому должен быть одобрен3A
.ToString
дважды