Contexte
Ce défi est en l'honneur des apsillers , qui ont remporté la catégorie Pas aussi simple qu'il n'y paraît dans Best of PPCG 2016 avec leur défi Ma boîte à musique à 4 notes peut-elle jouer cette chanson? Toutes nos félicitations!
Sur sa page "À propos de moi", cet utilisateur a un simulateur vraiment soigné pour l' automate cellulaire Game of Life . (Sérieusement, allez le vérifier.) D'un autre côté, le mot aspillera est espagnol pour "flèches éclairées". À la lumière de ces faits, ce défi concerne les flèches dans Game of Life.
Flèches de jeu de la vie
Dans GoL, nous représenterons une flèche par un planeur et un mur par une séquence de blocs . Un seul planeur s'approche du mur par le haut et essaie de voler à travers un espace dans le mur (la flèche éclairée). Votre tâche consiste à vérifier si le planeur passe à travers la flèche ou s’écrase dans le mur.
Contribution
Votre entrée est une grille de bits, qui représente une configuration GoL. Vous pouvez le prendre dans n'importe quel format raisonnable (chaîne multiligne de deux caractères ASCII imprimables différents, liste de chaînes, tableau 2D d'entiers, tableau 2D de booléens, etc.). Pour plus de clarté, j'utiliserai les chaînes de caractères multilignes des caractères .#
suivants.
L'entrée est garantie d'avoir plusieurs propriétés. Tout d'abord, sa hauteur est de 2N pour certains N ≥ 6 , et sa largeur est d'au moins 2N + 2 . L'entrée sera tout .
s, sauf que quelque part sur les trois premières rangées est un planeur, et sur les deux rangées du milieu il y a un mur de blocs. Le planeur se dirigera vers le sud-ouest ou le sud-est, et sa position est telle que si les murs sont supprimés, il ne passera pas par un bord latéral avant d'atteindre le bord inférieur (mais il peut atteindre un coin de la grille). Le planeur est initialement séparé des bords gauche et droit par au moins un pas de .
s. Cela peut être dans n'importe quelle phase.
Le mur est constitué de blocs, qui sont séparés par une colonne de .
s, sauf en un seul endroit, où ils seront séparés par au moins deux colonnes de .
s. Comme le planeur, les blocs les plus à gauche et à droite sont également séparés des bords par un pas de .
s. Il y aura toujours au moins un bloc sur le bord gauche et un bloc sur le bord droit.
Voici un exemple de grille d'entrée valide:
....#......................
..#.#......................
...##......................
...........................
...........................
...........................
.##.##............##.##.##.
.##.##............##.##.##.
...........................
...........................
...........................
...........................
...........................
...........................
Sortie
Comme indiqué, votre tâche consiste à déterminer si le planeur s'écrase dans le mur ou se rend jusqu'au bord sud. Aux fins de ce défi, un crash se produit si la configuration n'est plus constituée d'un seul planeur et du mur de blocs, indépendamment de ce qui se passe plus tard dans la simulation. Les diagrammes suivants montrent les plus petites lacunes qu'un planeur sud-est peut traverser sans s'écraser dans les deux phases distinctes (la condition pour les planeurs sud-ouest est symétrique).
...#...........
.#.#...........
..##...........
...............
...............
##...........##
##...........##
...#...........
....#..........
..###..........
...............
...............
##...........##
##...........##
Si le planeur vole à travers le mur, vous devez afficher une valeur vraie, et sinon une valeur fausse. Pour l'exemple ci-dessus, la sortie correcte est fausse, car le planeur va s'écraser dans la partie gauche du mur.
Aux fins de ce défi, vous pouvez supposer que si vous simulez GoL sur l'entrée pour 2 * (hauteur - 3) étapes, le planeur est sur la rangée du bas dans la position attendue et le mur est intact, alors la sortie est véridique .
Règles et notation
Vous pouvez écrire un programme complet ou une fonction. Le nombre d'octets le plus bas gagne.
Cas de test
J'ai rassemblé les cas de test dans un référentiel GitHub , car ils sont assez volumineux. Voici les liens vers les fichiers individuels:
Réponses:
Python 2 ,
142136135 135 octets-6 octets grâce à ElPedro
-1 octet grâce à TuukkaX
Essayez-le en ligne! ou vérifier tous les cas de test
Vérification de l'orientation (est / ouest):
Utilisez
z=p[2].index(1)
pour obtenir le premier carré de la 3ème ligne (représenté par le carré rouge), puism=(p[1][z]-p[1][z+1]<1)*2-1
pour soustraire la valeur de droite (verte) de celle de gauche (bleue), de cette façon, les 4 états des planeurs qui vont au sud-ouest résulte en1
(rangée du haut de l'image), tandis que ceux qui vont au sud-est donnent0
ou-1
.Puis convertissez:
1 -> -1
et0,-1 -> 1
à utiliser sur le paramètre pour inverser les listes lorsque vous traitez avec des listes occidentales. De cette façon, les planeurs allant vers le sud-ouest sont menacés de la même manière que celui qui va vers le sud-est.Mouvement de planeur
C'est le mouvement que fait le planeur allant vers le sud-est, il a un motif en "échelle", et le bloc le plus à gauche sur la 3ème ligne est constant pour chaque motif. En l'utilisant comme point de départ, les 3 blocs environnants à gauche et à droite, et les 4 blocs du milieu sont vérifiés pour la présence de
1
s (ce serait le mur).la source
i
à l'0
extérieur de lafor
boucle, puis en y ajoutant 1 à chaque passage et ainsi vous débarrasser deenumerate
. Semble fonctionner lorsque je l'ai essayé avec votre TIO. +1 pour une réponse intéressante, que j'ai raison ou tort.1 in
. +1.Octave,
123122108 octetsMerci à @LuisMendo économisé 2 octets
Essayez-le en ligne!
Ou
Vérifier tous les cas de test
Merci à Rod de préparer des cas de test.
Réponse précédente:
Extraire d'abord le modèle de mur comme variable
B
.Effectuez une simulation GoL jusqu'à ce que le motif de mur et le motif simulé aient plus / moins de 5 cellules différentes.
Si le planeur a reçu la dernière ligne, la fonction renvoie true.
la source
Rétine ,
1019391 octetsLe nombre d'octets suppose un codage ISO 8859-1.
Essayez-le en ligne!
Certainement pas encore optimal.
la source