Wireworld est un automate cellulaire qui a été conçu pour ressembler à des électrons traversant des fils. Sa mécanique simple permet la construction de circuits numériques. Il a même permis la construction d'un ordinateur entier .
Votre mission est de créer l'implémentation Wireworld la plus courte dans la langue de votre choix.
Chaque cellule de la grille a un état sur quatre. Les quatre états sont "vierge", "cuivre", "tête d'électron" ou "queue d'électron".
- Une cellule vide restera toujours une cellule vide
- Une tête d'électrons deviendra toujours une queue d'électrons
- Une queue d'électrons deviendra toujours du cuivre
- Une cellule en cuivre deviendra une tête d'électron si exactement un ou deux de ses huit voisins sont des têtes d'électrons, sinon elle restera en cuivre
Cette compétition aura un style similaire à la compétition Shortest Game of Life , mais avec quelques changements.
- La grille doit être d'au moins 40 par 40 cellules
- Les bords de la grille ne doivent PAS s'enrouler (pas un tore). Traitez les cellules en dehors du champ comme étant constamment "blanches".
- Les utilisateurs doivent pouvoir saisir leur propre configuration de démarrage.
- Regarder des écrans vierges n'est pas amusant. Le programme doit afficher visuellement la simulation pendant son exécution.
C'est le golf de code, le moins d'octets gagne.
la source
ALPACA, 82 caractères
ALPACA est un langage spécialement conçu pour les automates cellulaires.
o n'est rien; c est conducteur; e est électron; t est la queue d'électrons.
la source
GolfScript (
125 120 105100 caractères)Notez que je compte
\033
chacun comme un caractère, car ils peuvent être remplacés par unESC
caractère littéral . Cela utilise des codes de contrôle ANSI, repose donc sur un tty compatible. Notez également que les cadres sont imprimés en commençant par la grille d'entrée.Il y a un certain chevauchement avec Générer une grille de sommes , qui utilise également le voisinage de Moore.
Encodage: espace vide =>
; tête d'électrons =>
i
; queue d'électrons =>`
; cuivre =>X
.La pause entre les itérations est le temps nécessaire pour calculer 46656 46656 . Le passage
6.?.?
à une autre expression vous permet de contrôler la vitesse; le suivant le plus lent pour le même nombre de caractères est7.?.?
, ce qui est beaucoup plus lent (la sortie est 22 fois plus grande et ce n'est pas un calcul de complexité linéaire).Pour un cas de test, j'utilise
du défi Rosetta Code Wireworld .
la source
Python
371341 caractèresOuais, ce n'est pas si court, mais il a un GUI interactif!
Instructions:
Cliquez avec le bouton gauche de la souris pour placer le fil
Cliquez avec le bouton droit de la souris pour effacer
Cliquez avec le bouton central de la souris pour placer la tête d'électrons
Cliquez en dehors des axes pour faire avancer l'automate
la source
(x>0)&(x<3)
->(0<x<3)
. :)Python (
243214)J'ai essayé de faire un croisement entre la convivialité et les personnages. La grille est de 40x40. L'entrée est donnée sur stdin. Une tête d'électrons est
h
, la queue d'électrons estt
, le cuivre estc
, tout le reste est vide.La boucle while (ligne 3) non compressée (ne fonctionnera pas si elle est placée dans le code):
la source
g[e]='h'if(t=='c')&...else't'if i=='h'else'c'if i=='t'else i
. Je ne sais pas si cela fonctionne exactement telC,
355347300294 car.Edit: réalisé que je n'ai pas besoin
feof()
Edit: sauvé 47 caractères! Suppression du sommeil, suppression de presque toutes les orthèses, combinaison de nombreuses opérations.
Edit: Le dernier aujourd'hui, depuis que j'ai cassé 300 caractères. Changé
printf
enputs
, trouvé une petite optimisation mignonne avec la première comparaison.C ne se prête pas bien à ce genre de problème, mais bon, jouer au golf est amusant. C'est une implémentation assez brutale, mais je voulais voir jusqu'où je pouvais jouer.
L'entrée est un fichier texte nommé
i
. Il contient une représentation de l'état de départ, avec*
pour le cuivre,+
pour la tête d'électrons,-
pour la queue d'électrons, des espaces pour les cellules vides. J'utilise la porte XOR de la page wiki pour les tests.la source
cond?43:42
être écrit42+(cond)
? Et je suis sûr que celar=s[j][i++];*p=r==43?45:r;if(r==45)*p=42;
peut être réduit àr=s[j][i++];*p=r==43?45:r==45?42:r;
sinonr=s[j][i++]-43;*p=!r?45:r==2?42:r;
Python,
234218 caractèresVous entrez le tableau sous la forme de trois listes de nombres complexes représentant les coordonnées des cellules de cuivre (qui doivent inclure les listes de têtes et de queues), de têtes et de queues. Voici un exemple:
Notez que nous avons
eval
l'entrée, vous pouvez donc utiliser des expressions arbitrairement complexes pour les listes de nombres complexes.la source
QBasic, 309 octets
Attention: la version golfée n'est pas conviviale: elle a une méthode de saisie bizarre, fonctionne comme une boucle infinie, et n'a pas de retard (donc, tourne trop vite sur certains systèmes). Exécutez-le uniquement si vous savez comment terminer un programme dans votre environnement QBasic. La version non golfée est recommandée (voir ci-dessous).
Pour exécuter, spécifiez à l'invite de saisie la largeur
w
et la hauteur de votre configurationh
.1 saisissez Puisw*h
codes à un seul chiffre pour les cellules ( se déplaçant de gauche à droite, puis de haut en bas), avec0
= vide6
= fil7
= tête de signal1
= queue de signalUne fois que vous avez entré toutes les cellules, la simulation commencera (et se poursuivra indéfiniment, jusqu'à ce que vous tuiez le programme).
Non golfé
Une version plus conviviale. Pour modifier la mise en page, modifiez les
DATA
instructions à la fin.Le code tire parti de la
POINT
fonction, qui lit la valeur de couleur d'un pixel à l'écran. Cela signifie que nous n'avons pas à stocker les cellules séparément sous forme de tableau. Pour nous assurer que toutes les cellules sont mises à jour simultanément, nous effectuons les mises à jour sur une deuxième "page". Nous pouvons basculer la page active à l'aide d'une version de l'SCREEN
instruction et copier le contenu d'une page dans une autre à l'aide de l'PCOPY
instruction.1 Les valeurs maximales de largeur et de hauteur dépendent du mode d'écran utilisé. Dans
SCREEN 9
, la largeur peut aller jusqu'à 638 et la hauteur jusqu'à 348.SCREEN 7
a une résolution plus petite (taille de configuration maximale 318 par 198), mais les pixels sont plus grands et donc plus faciles à voir (sur DOS QBasic ou l'émulateur DOSBox - malheureusement QB64 juste donne une fenêtre plus petite).Exemple d'exécution
Version non golfée sur archive.org , avec le mode écran 7:
la source