Je jouais avec un automate cellulaire et j'en ai trouvé un qui avait un comportement intéressant. Voici comment ça fonctionne:
Il lit une chaîne binaire de gauche à droite, s'il rencontre un 1suivi par d' 2autres valeurs, il ajoutera un 0au résultat et continuera la lecture. S'il rencontre a 0(ou s'il reste moins de 3 valeurs), il ajoutera la valeur actuelle et a 1et continuera la lecture. À la fin de la chaîne, il en ajoutera un simple 1au résultat.
Voici un exemple élaboré d'une génération
01011111
^
Nous rencontrons d'abord un 0donc nous ajoutons 01à notre résultat
01011111
^
01
Maintenant, nous rencontrons un 1donc nous ajoutons un zéro et sautons les deux valeurs suivantes
01011111
^
010
On en rencontre un autre 1donc on fait de même
01011111
^
0100
Nous avons maintenant un autre 1espace mais pas assez pour sauter, donc nous ajoutons la cellule actuelle et un 1(dans ce cas 11)
01011111
^
010011
Nous sommes à la fin donc nous ajoutons un single 1et terminons cette génération
01011111
^
0100111
Tâche
Étant donné l'entrée dans un format raisonnable, vous devez créer une fonction ou un programme qui calcule une génération de l'automate.
Il s'agit d'une question de code-golf donc les réponses seront notées en octets, avec moins d'octets étant mieux.
Exemple d'implémentation
Voici un exemple d'implémentation dans Haskell (définit une fonction d, mais le programme imprime indéfiniment une itération):
d('1':_:_:x) = "0" ++ d x
d(a:x) = a:'1':d x
d x = "1"
r x = x:map d(r x)
10il devrait s'imprimer 11011? Je pense que quelques cas de test supplémentaires seraient utiles