Le défi
Vous devez écrire un programme complet qui prend sept nombres de STDIN et imprime l'historique STDOUT en deux dimensions de l'automate cellulaire (CA). C'est le golf de code.
Formatage de l'entrée L'entrée sera composée de sept entiers / chaînes séparés par des virgules. Le premier nombre est le numéro de la règle selon le code Wolfram (le nom standard de chaque règle). Le second est la configuration de démarrage initiale. Les troisième et quatrième décrivent quel modèle et combien de fois il doit être ajouté à gauche de la configuration de départ. comme rembourrage. Les cinquième et sixième font de même pour le côté droit. Le dernier nombre est le nombre de générations pour exécuter la simulation.
Ainsi, un exemple d'entrée est 90,11,0,4,0,4,5
. Cela devrait indiquer à votre programme que vous exécutez la règle 90 . Il doit également indiquer au programme que vous souhaitez que la configuration initiale soit 11
avec la chaîne 0
ajoutée 4 fois aux deux extrémités, de sorte que le modèle de démarrage réel est 0000110000
. Il indique également à votre programme d'exécuter cette simulation pendant 5 générations.
Sortie Votre programme doit imprimer l'intégralité du tableau de cellules à chaque génération (séparées par des retours à la ligne), de sorte que la sortie soit le diagramme espace-temps de l'autorité de certification. Pour chaque génération, l'état de chaque cellule est déterminé par son état et les états des cellules immédiatement à gauche et à droite, conformément à la règle fournie en entrée. La simulation doit s'enrouler autour des bords. La première chose imprimée devrait être le tableau de départ en tant que gen. 0.
L'entrée 90,11,0,4,0,4,5
doit donner la sortie suivante aussi exactement que possible.
0000110000
0001111000
0011001100
0111111110
1100000011
0110000110
Notez que l'état de départ n'est pas inclus dans les cinq générations. Notez également que la simulation s'enroule autour des bords.
Plus d'exemples
contribution:
184,1100,01,2,01,1,4
production:
0101110001
1011101000
0111010100
0110101010
0101010101
contribution:
0,1011,1,0,0,1,2
production:
10110
00000
00000
Plus d'informations sur le fonctionnement des CA 1D et leur numérotation
la source
Réponses:
Golfscript,
77 7370 caractèresMerci à @Howard, qui a expliqué comment enregistrer 4 caractères.
la source
48-
->1&
et je pense aussi trois autres. Vous pouvez omettre)
avant le bloc (pas augmenter le compteur) et donc enregistrer également les deux derniers pops.APL (153 caractères)
Et sous une forme moins lisible et légèrement plus courte:
Exemple:
Je suis certain qu'il y a place à amélioration (j'ai même trouvé quelques changements en écrivant cet article!), Mais certains pourraient impliquer des changements fondamentaux, et je ne peux plus supporter de regarder APL plus longtemps. La variante d'APL utilisée ici est Dyalog APL .
la source
Ruby,
165159 caractèresEdit: j'ai trouvé quelques endroits pour de petites améliorations.
Exemple d'exécution:
la source
C,
303 305 301 294292305 Modifier: oups. Oublié cela
calloc()
prend deux arguments. Il explosait sur une entrée plus importante.301 Edit: Ah HA! J'ai utilisé mon
calloc()
boo-boo pour économiser 2 octets supplémentaires en augmentant la taille du bloc de la mémoire demandée.294 Edit: Broke 300! Éliminé l'un des
strcat()
s et modifié quelques boucles. Je dois utiliser le munch maximal, ce qui est aussi amusant à dire qu'à utiliser.292 Edit: n'a pas eu besoin de l'
+2
allocation en mémoire.J'ai utilisé la réponse de luser droog comme idée de base, mais j'ai modifié l'algorithme d'encapsulation, ainsi que de nombreux ajustements et factorisations des constantes.
la source
C,A,
! :)brk()
? puisp=s+C+1;
quelque part.+++
!%[01]
en%s
! -9 (... de nombreuses années plus tard)C (
487484418 avec espaces supprimés)* A chuté de 66 avec l'aide de JoeFish *
manuscrit
la source
int
variables globales et en supprimant#include
:r,A,B,C,n,i,j; main(){char *s...
for
boucles:for(;A--;)strcat(s,a);
A
etC
plus tard pour ne pas avoir à déclareri
ou pasB
du tout.p=malloc((C=strlen(s))+1); --C; strcpy(p,s); for(A=0;A<n;A++){
Désolé, je m'arrête maintenant :)--C;
:p=malloc((C=strlen(s)-1)+2);
. Je pense que le code de golf est plus amusant que de le créer en premier lieu!#include
depuisscanf
est variadique. Mais c'est probablement ok car il n'est appelé qu'une seule fois. ... Mon ancienne machine est morte hier, et j'installe toujours Cygwin. J'incorporerai ces changements dès que je pourrai le tester. Merci!