fundo
Este desafio é uma homenagem aos apsillers , que venceram a categoria Não tão simples quanto parece no Best of PPCG 2016 com o desafio. Minha caixa de música de 4 notas toca essa música? Parabéns!
Na página "Sobre mim", esse usuário possui um simulador muito interessante para o autômato celular Game of Life . (Sério, vá dar uma olhada.) Por outro lado, a palavra aspillera é em espanhol para "iluminado por setas". À luz desses fatos, esse desafio é sobre flechas no jogo da vida.
Jogo de setas da vida
No GoL, representaremos uma flecha por um planador e uma parede por uma sequência de blocos . Um único planador se aproxima da parede de cima e tenta voar através de um espaço na parede (a flecha). Sua tarefa é verificar se o planador passa pelas setas ou bate na parede.
Entrada
Sua entrada é uma grade de bits, que representa uma configuração GoL. Você pode aceitá-lo em qualquer formato razoável (sequência multilinha de dois caracteres ASCII imprimíveis, lista de sequências, matriz 2D de números inteiros, matriz 2D de booleanos etc.). Para maior clareza, usarei seqüências multilinhas dos caracteres .#
a seguir.
A entrada é garantida para ter várias propriedades. Primeiro, sua altura é 2N para alguns N ≥ 6 e sua largura é pelo menos 2N + 2 . A entrada será toda .
s, exceto que em algum lugar nas três linhas superiores existe um planador, e nas duas linhas do meio há uma parede de blocos. O planador estará indo para sudoeste ou sudeste, e sua posição é tal que, se as paredes forem removidas, ele não passará por uma borda lateral antes de atingir a borda inferior (mas pode atingir um canto da grade). O planador é inicialmente separado das bordas esquerda e direita por pelo menos uma etapa de .
s. Pode estar em qualquer fase.
A parede consiste em blocos, que são separados por uma coluna de .
s, exceto em um local, onde serão separados por pelo menos duas colunas de .
s. Como o planador, os blocos mais à esquerda e mais à direita também são separados das arestas por um passo de .
s. Sempre haverá pelo menos um bloco na borda esquerda e um bloco na borda direita.
Aqui está um exemplo de uma grade de entrada válida:
....#......................
..#.#......................
...##......................
...........................
...........................
...........................
.##.##............##.##.##.
.##.##............##.##.##.
...........................
...........................
...........................
...........................
...........................
...........................
Saída
Como afirmado, sua tarefa é determinar se o planador colide com a parede ou atravessa a borda sul. Para os propósitos deste desafio, ocorre uma falha se a configuração não mais consistir em um único planador e na parede de blocos, independentemente do que acontecer posteriormente na simulação. Os diagramas a seguir mostram as menores lacunas pelas quais um planador do sudeste pode atravessar sem bater nas duas fases distintas (a condição para o planador do sudoeste é simétrica).
...#...........
.#.#...........
..##...........
...............
...............
##...........##
##...........##
...#...........
....#..........
..###..........
...............
...............
##...........##
##...........##
Se o planador voa através da parede, você deve gerar um valor verdadeiro e, caso contrário, um valor falso. Para o exemplo acima, a saída correta é falsa, pois o planador colidirá com a parte esquerda da parede.
Para os propósitos deste desafio, você pode assumir que, se simular o GoL na entrada por 2 * (altura - 3) etapas, o planador estará na linha inferior na posição esperada e a parede estará intacta, e a saída será verdadeira .
Regras e pontuação
Você pode escrever um programa completo ou uma função. A menor contagem de bytes vence.
Casos de teste
Eu coletei os casos de teste em um repositório do GitHub , pois eles são muito grandes. Aqui estão os links para os arquivos individuais: