Задний план
Это задание в честь апсиллеров , которые выиграли в номинации « Не все так просто, как кажется » в номинации «Лучшее из PPCG 2016», может ли моя музыкальная шкатулка с 4 нотами сыграть эту песню? Поздравляем!
На своей странице «Обо мне» у этого пользователя есть действительно изящный симулятор для клеточного автомата Game of Life . (Серьезно, иди проверь это.) С другой стороны, слово aspillera в переводе с испанского означает «стрелки». В свете этих фактов, этот вызов о стрелках в игре жизни.
Игра Жизни
В GoL мы будем представлять стрелку планером , а стену - последовательностью блоков . Единственный планер приближается к стене сверху и пытается пролететь сквозь щель в стене (освещенную стрелами). Ваша задача - проверить, проходит ли планер через освещенную стрелами или врезается в стену.
вход
Ваш вход представляет собой сетку битов, которая представляет конфигурацию GoL. Вы можете взять его в любом приемлемом формате (многострочная строка из любых двух печатных символов ASCII, список строк, двумерный массив целых чисел, двумерный массив логических значений и т. Д.). Для ясности я буду использовать многострочные строки символов .#в следующем.
Входные данные гарантированно имеют несколько свойств. Во-первых, его высота равна 2N для некоторого N ≥ 6 , а ширина - не менее 2N + 2 . На входе будут все .s, за исключением того, что где-то в верхних трех рядах находится планер, а в двух средних рядах есть стена блоков. Планер будет лететь на юго-запад или юго-восток, и его положение таково, что если стены будут удалены, он не пройдет через боковой край до достижения нижнего края (но может достигнуть угла сетки). Планер изначально отделен от левого и правого краев хотя бы одним шагом .s. Это может быть на любом этапе.
Стена состоит из блоков, которые разделены одним столбцом .s, за исключением одного места, где они будут разделены как минимум двумя столбцами .s. Как и планер, левый и правый блоки также отделены от краев одним шагом .s. Всегда будет по крайней мере один блок на левом краю и один блок на правом краю.
Вот пример правильной входной сетки:
....#......................
..#.#......................
...##......................
...........................
...........................
...........................
.##.##............##.##.##.
.##.##............##.##.##.
...........................
...........................
...........................
...........................
...........................
...........................
Выход
Как уже говорилось, ваша задача - определить, врезается ли планер в стену или проходит к южному краю. Для целей этой задачи происходит сбой, если конфигурация больше не состоит из одного планера и стены блоков, независимо от того, что произойдет позже в симуляции. На следующих диаграммах показаны наименьшие промежутки, через которые юго-восточный планер может пройти без столкновения в двух разных фазах (условие для юго-западных планеров симметричное).
...#...........
.#.#...........
..##...........
...............
...............
##...........##
##...........##
...#...........
....#..........
..###..........
...............
...............
##...........##
##...........##
Если планер пролетает сквозь стену, вы должны вывести истинное значение, а в противном случае - ложное значение. Для приведенного выше примера правильный вывод неверен, так как планер врезается в левую часть стены.
Для целей этой задачи вы можете предположить, что если вы смоделируете GoL на входе для шагов 2 * (высота - 3) , планер находится в нижнем ряду в ожидаемом положении, а стена не повреждена, то вывод верен ,
Правила и оценки
Вы можете написать полную программу или функцию. Побеждает самое низкое число байтов.
Контрольные примеры
Я собрал тестовые случаи в репозиторий GitHub , так как они довольно большие. Вот ссылки на отдельные файлы:



