Chaque cellule d'un automate cellulaire réaliste n'a besoin que d'un bit pour la représenter car elle ne peut être vivante ou morte. Cela signifie qu'il n'y a que deux couleurs; Plutôt ennuyeux.
Les images normales ont 24 bits par pixel (8 dans chaque RVB). Cela signifie que dans une image normale avec des pixels comme cellules, vous pouvez simuler 24 jeux réalistes à la fois!
Défi
Votre tâche consiste à écrire un programme qui appliquera une génération des règles d'un automate cellulaire réaliste à une image de profondeur 24 bits (dans n'importe quel format bien connu que vous aimez), et à sortir l'image résultante.
Chacune des 24 couches utilisera le même ensemble de règles réaliste, strictement dans sa propre couche. Les 24 couches n'interagissent pas entre elles.
Également
- Les zéros sont des cellules mortes et les uns sont des cellules vivantes.
- Les conditions aux limites sont périodiques (formant un tore).
- Toutes les dimensions de l'image devraient fonctionner.
Entrée sortie
Votre programme doit accepter 3 arguments, via stdin ou la ligne de commande (ou l'équivalent le plus proche de votre langue):
- Nom du fichier image d'entrée.
- Une chaîne des chiffres 0 à 8 dans l'ordre croissant qui indique la naissance de nouvelles cellules:
- Si le chiffre d est dans la chaîne, les cellules mortes s'animent lorsqu'elles ont d voisins vivants.
- Exemple:
3
la vie est normale - les cellules mortes avec exactement 3 voisins vivants prennent vie.
- Une chaîne des chiffres 0 à 8 dans l'ordre croissant qui indique quand les cellules existantes survivent:
- Si le chiffre d est dans la chaîne, les cellules vivantes avec d voisins vivants survivent jusqu'à la génération suivante, sinon elles meurent.
- Exemple:
23
la vie est normale - seules les cellules avec exactement 2 ou 3 voisins survivent au tour suivant.
Notez que le quartier Moore est toujours utilisé. Lisez ceci ou cela pour plus d'informations sur ce qui définit précisément un automate réaliste et de nombreux jeux de règles intéressants.
L'image de sortie 1 génération plus tard doit être affichée ou enregistrée sous out.png
(ou bmp
ou autre).
Soumission
Le code le plus court en octets gagne.
Vous devez inclure au moins une image de test et de ses trois générations suivantes immédiates pour certains ruleset non trivial. Utilisez votre avatar et les règles de vie normales si vous ne trouvez rien de mieux.
Si vous le souhaitez, vous pouvez utiliser ce Gosper Glider Gun où les seuls bits vivants sont dans la couche verte 128 (il ne fonctionne que dans la vie normale):
La publication de séquences intéressantes ou même d'animations est fortement encouragée.
la source
Réponses:
MATLAB: 275
Mon préféré des paramètres que j'ai essayé est
45678
,568
qui , après un résultat de désintégration progressive dans un ciel d'étoiles scintillantes. Cette image représente «la désintégration de la persistance de la mémoire».Code de production de gif non golfé (accepte PNG sans extension):
Code golfé qui accepte un nom de fichier complet (qui peut être GIF, JPEG et peut-être d'autres choses) et écrit dans
out.png
:Un fait précédemment découvert est que les paramètres
12
,1
peuvent être utilisés pour générer un tapis comme Sierpinski fractale. En voici un avec un point de départ placé au hasard dans chaque bit:la source
Mathematica, 359
Je saisis les invites de chaîne dans l'ordre (1) les règles de naissance, (2) les règles de survie, (3) le nom du fichier, et j'affiche le résultat directement dans Mathematica.
Cela devrait être en mesure de traiter les formats les plus populaires, tant que le fichier a une profondeur de 24 bits.
Voici une version quelque peu non golfée:
Voici deux exemples utilisant l'avatar de Rainbolt :
20 générations utilisant le Game of Life standard
[3,23]
:20 générations utilisant
[456,34567]
:Et voici un GIF des 200 premières générations de cette dernière règle. Le GIF saute toutes les trois images, car je ne pourrais pas le compresser en dessous de 2 Mo autrement:
la source
Python 2, 427
Pour ceux qui n'ont pas Mathematica;)
Il demande le nom de fichier, puis les cas de naissance, puis les cas de survie. Donc, pour les règles de vie normales, vous pouvez entrer
test.bmp
, alors3
, alors23
(pas de guillemets ou quoi que ce soit nécessaire).J'ai utilisé le formatage de chaînes pour indexer et recombiner les bits de couleur, bien que je crains que ce ne soit probablement pas optimal.
Notez que c'est assez lent.
Exemple
Haute vie et grand mélange d'art, non? (Règle
36
/23
.)Original / Génération 1
Génération 2 / Génération 3
la source
Java, 1085 octets
Exemples (règle 368/245):
Gen 0:
Gen 1:
Gen 2:
Gen 3:
Gen 4:
la source