Défi:
Étant donné une matrice (ou un tableau 2D) de 0 et de 1, affichez le nombre d'étapes nécessaires pour que le jeu de la vie de Conway atteigne un état stable, ou -1 s'il n'en atteint jamais un. Un état stable est un état dans lequel aucune cellule n'est activée ou désactivée à chaque étape. Le jeu doit fonctionner dans la matrice donnée, avec le haut et le bas connectés et les côtés connectés. (c.-à-d. étant donné une matrice 4x3, elle devrait fonctionner sur un tore 4x3) La matrice d'entrée ne sera pas supérieure à 15x15.
Remarque: Si la matrice démarre dans un état stable, la sortie doit être 0.
Échantillons:
Contribution:
[[0,0,0],
[0,1,1],
[0,1,0]]
Production:
2
Processus: (cela n'a pas besoin d'être affiché)
[[0,0,0],
[0,1,1],
[0,1,0]]
[[1,1,1],
[1,1,1],
[1,1,1]]
[[0,0,0],
[0,0,0],
[0,0,0]]
Contribution:
[[0,0,1,1],
[0,1,1,1],
[0,1,0,0],
[0,1,1,1]]
Production:
2
Processus:
[[0,0,1,1],
[0,1,1,1],
[0,1,0,0],
[0,1,1,1]]
[[0,0,0,0],
[0,1,0,1],
[0,0,0,0],
[0,1,0,1]]
[[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]]
Contribution:
[[0,1,0,0],
[0,1,0,0],
[0,1,0,0],
[0,0,0,0]]
Production:
-1
Processus:
[[0,1,0,0],
[0,1,0,0],
[0,1,0,0],
[0,0,0,0]]
[[0,0,0,0],
[1,1,1,0],
[0,0,0,0],
[0,0,0,0]]
[[0,1,0,0],
[0,1,0,0],
[0,1,0,0],
[0,0,0,0]]
répéter pour toujours
Contribution:
[[0,0,0,0],
[0,0,0,1],
[0,1,1,1],
[0,0,1,0]]
Production:
4
Processus:
[[0,0,0,0],
[0,0,0,1],
[0,1,1,1],
[0,0,1,0]]
[[0,0,0,0],
[1,0,0,1],
[1,1,0,1],
[0,1,1,1]]
[[0,1,0,0],
[0,1,1,1],
[0,0,0,0],
[0,1,0,1]]
[[0,1,0,1],
[1,1,1,0],
[0,1,0,1],
[1,0,1,0]]
[[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]]
Contribution:
[[0,0,0,0],
[0,1,1,0],
[0,1,1,0],
[0,0,0,0]]
Production:
0
Processus:
L'état de départ est stable.
Règles du jeu de la vie
Si une cellule désactivée (0) se trouve à côté d'exactement trois cellules activées (1), elle est activée. Sinon, il est laissé de côté. Si une cellule qui est allumée est à côté de 2 ou 3 sur des carrés, elle est allumée. Sinon, il est désactivé.
Réponses:
Mathematica,
130129 octetsJe ne recommanderais pas d'essayer plus de 4x4 entrées, car cela va prendre une éternité (et beaucoup de mémoire).
Explication
Cela simule simplement le jeu de la vie pour 2 N étapes où N est le nombre de cellules dans l'entrée. Cela garantit que si le système s'installe dans un état stable, nous l'avons atteint. Ensuite, nous trouvons la première paire d'états identiques consécutifs dans l'histoire simulée.
Passons en revue le code:
Ceci calcule 2 N , car
Join@@
est utilisé pour aplatir une liste 2D.Cela simule le jeu de la vie pour 2générations N. La matrice 3x3 spécifie le voisinage d'un automate 2D totaliste et
224
est le numéro de règle de Game of Life standard. J'ai écrit sur la façon de calculer ce nombre ici sur Mathematica.SE .Cela obtient toutes les paires de générations consécutives (qui se chevauchent).
Cela trouve la première paire de générations identiques, par défaut à
0
si aucune n'est trouvée et limite la recherche à la profondeur1
. Si une telle paire est trouvée, le résultat est cependant renvoyé dans une liste. Nous utilisons donc:Pour extraire le premier élément de cette liste (la valeur par défaut de
0
, étant atomique, n'en est pas affectée).Enfin, nous soustrayons un parce que le défi attend des
0
indices basés sur et-1
pour l'échec.la source
Lua,
531509488487464424405404 octetsQui veut une soumission massive? \ o /
Edit: Amélioré, mais je ne sais plus comment jouer au golf, alors ... des
explications sont à venir descommentaires ajoutés :)Enregistré ~ 60 octets avec l'aide de @ KennyLau
petit golf coupant un octet de plus en renommant
a
enY
pour empêcher la conversion hexadécimale en ligneNon golfé
Cas de test
Voici quelques cas de test
la source
Gelée,
2625 octetsEssayez-le en ligne! ou vérifiez tous les cas de test .
Cas de test plus grands (d' après la réponse de @ Katenkyo ): 15 × 15 stable |Planeur 15 × 14
Comment ça fonctionne
la source
Perl,
154151144140 140137133129 octetsComprend +3 pour
-ap0
Exécuter avec l'entrée comme une ligne de groupes de chiffres séparés par un espace
Cela n'est vraiment nécessaire que si l'entrée est immédiatement stable. Dans tous les autres cas, vous pouvez également le donner plus facilement sous forme de lignes de chiffres séparées:
Donner une entrée de cette manière donnerait cependant 1 au lieu de 0 pour une configuration immédiatement stable.
life.pl
:Presque battre Mathematica sur celui-ci ...
Ce n'est que sur les anciennes versions de Perl (où vous pouviez utiliser une constante comme variable) que cette solution de 126 octets fonctionne:
Dans le cas où il y a certainement au moins 2 lignes, cette solution de 123 octets fonctionne sur toutes les versions de Perl:
la source
rubis, 207 octets
Je garde un historique de chaque planche, donc si j'obtiens une planche que j'ai vue avant de savoir qu'une des deux choses s'est produite. il se pourrait d'abord que nous ayons trouvé une position stable, auquel cas ce sera la plus rancunière de notre histoire. l'autre possibilité est que nous ayons une boucle.
la source
15*15*4*1000
-> 900 Ko, assez bien pour les cas où nous aurons besoin de 10k + gens :).Julia,
9288 octetsVérification
la source