Фон
Це виклик на честь апсилерів , які виграли категорію не так просто, як це виглядає в Best of PPCG 2016 своїм викликом Чи може моя музична скринька із 4 нотами відтворити цю пісню? Вітаємо!
На своїй сторінці "Про мене" цей користувач має дійсно акуратний симулятор для мобільного автоматичного пристрою Game of Life . (Серйозно, іди перевірити це.) З іншого боку, слово aspillera є іспанським для "стрілець". З огляду на ці факти, це завдання стосується стрілок, що знаходяться в грі життя.
Гра в життя стрілець
У GoL ми будемо представляти стрілку планером , а стіну - послідовністю блоків . Одноплановий планер наближається до стіни зверху і намагається пролетіти через проміжок у стіні (стрілка). Ваше завдання - перевірити, чи планер проходить крізь стрілку стрілки або врізається в стіну.
Вхідні дані
Ваш вхід - це сітка бітів, яка представляє конфігурацію GoL. Ви можете взяти його в будь-якому розумному форматі (багаторядковий рядок будь-яких двох роздрукованих символів ASCII, список рядків, 2D масив цілих чисел, 2D масив булевих і т.д.). Для наочності я буду використовувати багаторядкові рядки символів .#
у наступному.
Гарантія має кілька властивостей. По-перше, його висота для деяких N ≥ 6 становить 2N , а ширина - щонайменше 2N + 2 . Вхід буде всім s, за винятком того, що десь на верхніх трьох рядах є планер, а на двох середніх рядах - стінка з блоків. Планер буде прямувати на південний захід або південний схід, і його положення таке, що якщо стіни будуть видалені, він не пройде через бічний край, перш ніж досягти нижнього краю (але може досягти кута сітки). Планер спочатку відокремлюється від лівого та правого країв щонайменше на один крок s. Це може бути в будь-якій фазі..
.
Стіна складається з блоків, які розділені одним стовпцем .
s, за винятком одного місця, де вони будуть розділені щонайменше двома колонами .
s. Як і планер, крайній лівий і правий блоки також відокремлюються від країв на один крок .
s. Завжди буде принаймні один блок з лівого краю та один блок з правого краю.
Ось приклад дійсної вхідної сітки:
....#......................
..#.#......................
...##......................
...........................
...........................
...........................
.##.##............##.##.##.
.##.##............##.##.##.
...........................
...........................
...........................
...........................
...........................
...........................
Вихідні дані
Як зазначалося, ваше завдання - визначити, чи планер врізається в стіну чи пробивається до південного краю. Для цілей цього виклику відбувається збій, якщо конфігурація більше не складається з одного планера та стінки блоків, незалежно від того, що станеться пізніше при моделюванні. Наступні діаграми показують найменші прогалини, через які південно-східний планер може пройти, не врізавшись у дві окремі фази (умова для південно-західних планера - симетрична).
...#...........
.#.#...........
..##...........
...............
...............
##...........##
##...........##
...#...........
....#..........
..###..........
...............
...............
##...........##
##...........##
Якщо планер пролітає крізь стіну, ви маєте вивести триєтне значення, а інакше - помилкове значення. Для наведеного вище прикладу правильний вихід - хибний, оскільки планер вріжеться в ліву частину стіни.
Для цілей цього виклику ви можете припустити, що якщо імітувати GoL на вході для 2 * (висота - 3) кроків, планер знаходиться в нижньому ряду в очікуваному положенні, а стінка є цілою, то вихід є трикучим .
Правила та оцінка
Ви можете написати повну програму або функцію. Виграє найменший байт.
Тестові справи
Я зібрав тестові випадки у сховище GitHub , оскільки вони досить великі. Ось посилання на окремі файли: