L'automate cellulaire semblable à la vie est un automate cellulaire qui est similaire au Game of Life de Conway, en ce sens qu'il fonctionne sur une grille carrée (théoriquement) infiniment grande, où chaque cellule a exactement 8 voisins et est l'un des 2 états, à savoir vivant et mort. .
Cependant, ces versions similaires sont différentes de manière cruciale: les règles pour qu'une cellule donnée prenne vie et les règles pour une cellule donnée pour survivre à la prochaine génération.
Par exemple, Game of Life classique utilise la règle B3/S23
, ce qui signifie qu'il faut 3 cellules vivantes pour en créer une nouvelle et 2 ou 3 voisins vivants pour survivre. Pour ce défi, nous supposerons que les voisins ne s’incluent pas, donc chaque cellule a exactement 8 voisins.
Votre tâche est, étant donné une configuration de départ, une règle de naissance, une règle de survie et un entier positif (le nombre de générations à exécuter), simuler l'automate Life-like en utilisant ces règles pour le nombre de générations donné dans le code le plus court possible . La configuration de départ sera une matrice carrée / un tableau bidimensionnel ou une chaîne multiligne, vous pouvez choisir. Les autres peuvent être donnés dans n'importe quel format et méthode raisonnables.
Par exemple, si la règle de naissance était 12345678
(tout voisin vivant), la règle de survie l'était 2357
et la configuration de départ était
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
les deux prochaines générations seraient
Generation 1: Generation 2:
0 0 0 0 0 1 1 1 1 1
0 1 1 1 0 1 1 0 1 1
0 1 0 1 0 1 0 1 0 1
0 1 1 1 0 1 1 0 1 1
0 0 0 0 0 1 1 1 1 1
Si le nombre de générations donné était de 10, la sortie serait quelque chose dans le sens de
0 1 1 1 0
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
0 1 1 1 0
Vous n'avez pas à gérer les modifications qui se produisent en dehors des limites données par la matrice d'entrée, cependant, toutes les cellules en dehors de la matrice commencent mortes. Par conséquent, la matrice d'entrée peut être de n'importe quelle taille, jusqu'à la valeur maximale que votre langue peut prendre en charge. Vous n'avez pas besoin de sortir la carte entre les générations.
Ceci est un code-golf donc le code le plus court l'emporte.
Cas de test
Ceux-ci utilisent la B/S
notation pour indiquer les règles utilisées
B2/S2
, generations = 100
, Configuration:
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
Production:
0 0 0 0 0 0 0 0
0 1 0 0 0 0 1 0
1 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
B1357/S2468
, generations = 12
, Configuration:
1 0 1 0 1 0
0 1 1 0 1 0
1 0 0 0 0 0
0 0 0 0 0 1
1 1 1 1 1 0
0 1 1 0 0 1
Production:
0 1 0 0 0 0
0 1 1 1 1 0
0 1 0 1 1 0
1 1 1 0 0 0
0 0 1 1 1 0
0 1 1 0 0 0
Si vous avez besoin de générer plus de cas de test, vous pouvez utiliser ce merveilleux simulateur. Veuillez vous assurer de limiter la taille de la planche
la source
Réponses:
MATL ,
2423 octetsLes entrées sont:
;
comme séparateur de lignes.Essayez-le en ligne! Ou voir les cas de test: 1 , 2 .
Pour quelques octets de plus, vous pouvez voir l' évolution de l'art ASCII .
Explication
la source
xx
début me semble un peu gaspilleur ...Wolfram Language (Mathematica) ,
144122 octetsEssayez-le en ligne!
Exemple d'utilisation:
utilise une grille aléatoire 10x10 comme point de départ, survit avec 2 ou 3 voisins, naissances avec 3 voisins, résultat du tracé à 5 itérations.
la source
R , 256 octets
Essayez-le en ligne!
Malheureusement, cela ne semble pas aussi golfé que je l'espérais.
Entrée : une matrice R et les paramètres du défi. Sortie : la matrice après R générations.
L'algorithme remplit la matrice de zéros pour gérer les limites. Ensuite, de manière itérative: 1er) il applique la règle de naissance et 2) il tue les cellules préexistantes qui n'ont pas passé la règle de survie. Le rembourrage est retiré lors du retour.
la source
216
qui est au moins un cube ...Python 2 ,
156149146 146 octetsEssayez-le en ligne!
Prend entrée:
R
ules:[birth,survial]
règles comme liste destring
. par exemple. (['135','246']
)g
énérations:int
c
onfiguration: tableau 2D carré de1/0
ouTrue/False
Renvoie un tableau 2D de
True/False
la source