sfondo
Questa sfida è in onore degli apsillers , che hanno vinto la categoria Non così semplice come appare in Best of PPCG 2016 con la loro sfida Il mio carillon a 4 note può suonare quella canzone? Congratulazioni!
Sulla loro pagina "Informazioni personali", questo utente ha un simulatore davvero accurato per l' automa cellulare Game of Life . (Seriamente, vai a dare un'occhiata.) D'altra parte, la parola aspillera è spagnolo per "frecce". Alla luce di questi fatti, questa sfida riguarda le freccette in Game of Life.
Frecce di Game of Life
In GoL, rappresenteremo una freccia di un aliante e un muro di una sequenza di blocchi . Un singolo aliante si avvicina al muro dall'alto, e cerca di volare attraverso uno spazio nel muro (le frecce illuminate). Il tuo compito è controllare se l'aliante passa attraverso le frecce illuminate o si schianta contro il muro.
Ingresso
Il tuo input è una griglia di bit, che rappresenta una configurazione GoL. Puoi prenderlo in qualsiasi formato ragionevole (stringa multilinea di due caratteri ASCII stampabili distinti, elenco di stringhe, array 2D di numeri interi, array 2D di booleani ecc.). Per chiarezza, userò le stringhe multilinea dei caratteri .#
nel seguito.
È garantito che l'input abbia diverse proprietà. Innanzitutto, la sua altezza è 2 N per alcuni N ≥ 6 e la sua larghezza è almeno 2 N + 2 . L'input sarà tutto .
s, tranne che da qualche parte nelle prime tre file c'è un aliante, e nelle due file centrali c'è un muro di blocchi. L'aliante si dirige verso sud-ovest o sud-est e la sua posizione è tale che se le pareti vengono rimosse, non passerà attraverso un bordo laterale prima di raggiungere il bordo inferiore (ma potrebbe raggiungere un angolo della griglia). La vela è inizialmente separata dai bordi sinistro e destro di almeno un passo di .
s. Può essere in qualsiasi fase.
Il muro è costituito da blocchi, che sono separati da una colonna di .
s, tranne in un punto, dove saranno separati da almeno due colonne di .
s. Come l'aliante, anche i blocchi più a sinistra e più a destra sono separati dai bordi di un passo di .
s. Ci sarà sempre almeno un blocco sul bordo sinistro e un blocco sul bordo destro.
Ecco un esempio di una griglia di input valida:
....#......................
..#.#......................
...##......................
...........................
...........................
...........................
.##.##............##.##.##.
.##.##............##.##.##.
...........................
...........................
...........................
...........................
...........................
...........................
Produzione
Come detto, il tuo compito è determinare se l'aliante si schianta contro il muro o attraversa il bordo sud. Ai fini di questa sfida, si verifica un arresto anomalo se la configurazione non è più costituita da un singolo aliante e dal muro di blocchi, indipendentemente da ciò che accade più avanti nella simulazione. I seguenti diagrammi mostrano gli spazi più piccoli che un aliante sud-est può attraversare senza schiantarsi nelle due fasi distinte (la condizione per gli alianti sud-ovest è simmetrica).
...#...........
.#.#...........
..##...........
...............
...............
##...........##
##...........##
...#...........
....#..........
..###..........
...............
...............
##...........##
##...........##
Se l'aliante vola attraverso il muro, dovrai generare un valore di verità, e altrimenti un valore di falsa. Nell'esempio sopra, l'output corretto è errato, poiché l'aliante si schianterà nella parte sinistra del muro.
Ai fini di questa sfida, si può presumere che se si simula GoL sull'input per passi 2 * (altezza - 3) , l'aliante si trova nella riga inferiore nella posizione prevista e il muro è intatto, quindi l'output è vero .
Regole e punteggio
È possibile scrivere un programma completo o una funzione. Vince il conteggio dei byte più basso.
Casi test
Ho raccolto i casi di test in un repository GitHub , poiché sono piuttosto grandi. Ecco i collegamenti ai singoli file: