Кріс, прихильний кросворд, має набір алгоритму для того, в якому порядку він їх вирішує.
Ми будемо використовувати вищезазначене зображення в якості керівництва.
- Кріс завжди починається з першої поперечної підказки, в цьому випадку 1 Поперек. Кріс - здібний ентузіаст кросвордів, тому передбачається, що він завжди буде знати відповідь на підказку, над якою працює.
- Після того, як Кріс заповнить підказку, він перевірить всі підказки, що прилягають до тих, які він завершив (у першому випадку 1 Вниз, 2 Вниз та 3 Вниз), а потім заповнить підказку з найменшим числом. Якщо немає сусідніх підказок, він перейде до кроку 3.
- Якщо підказка така, що наступне число (як описано в кроці 3) має як поперечний, так і низхідний, він спочатку заповнить поперечний ключ (100% визначеність, це межує з OCD!)
- Якщо немає сусідніх підказок, він перейде до наступної наявної підказки, наступної за кількістю (впоперек або вниз)
- Повторіть з кроку 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
.