Manufactoria: générer le programme d'acceptation le plus lent possible

18

Écrivez un programme Manufactoria qui acceptera la bande d'entrée vide. Mais ne le faites pas rapidement! Je veux dire, écrivez le programme rapidement, mais ne le laissez pas s'exécuter rapidement. Plus le programme est lent, mieux c'est, tant qu'il se termine finalement. L'exemple de programme ci-dessous prend 3:51 (le "temps total" rapporté par le simulateur).

entrez la description de l'image ici

http://pleasingfungus.com/Manufactoria/?lvl=36&code=g12:5f3;r9:8f1;p12:9f3;c13:9f0;r11:9f0;r10:9f0;r9:9f1;b11:8f0;b10:8f1 ; r9: 7f2; c10: 7f2; c11: 7f2; c12: 7f3; q12: 8f3; y13: 8f2; y14: 8f2; y15: 8f1; y15: 7f0; y14: 7f0; y13: 7f0; g12: 6f3; & ctm = Slow_Accepter!; Generate_the_slowest_possible_accepting_machine;:; 7; 3; 0 ;

Votre programme démarre avec la bande vide. Il doit griffonner un peu, mais finalement atteindre le carré de sortie. Vous pouvez laisser des données sur la bande si vous le souhaitez. Le programme le plus lent sur la planche 7x7 Manufactoria gagne!

Votre flèche droite est votre amie, elle accélère le simulateur.

Points bonus pour planter le simulateur!

Keith Randall
la source
Il n'y a donc aucune exigence pour accepter / rejeter une entrée autre que la bande vide?
Volatilité
@Volatilité: correcte.
Keith Randall
Chose ennuyeuse, le simulateur ne signalera pas le temps d'exécution, sauf si la bande est vide à la fin, car elle ne correspond pas à la sortie attendue du défi. (Heureusement, il m'a été facile d'effacer la bande à la fin sans avoir besoin de trop d'espace supplémentaire.)
Breadbox

Réponses:

22

~ 10 23 itérations ~ 10 15 itérations ~ 10 8 itérations

Configuration de Manufactoria

http://pleasingfungus.com/Manufactoria/?lvl=32&code=g9:7f2;b12:8f2;p13:8f5;p11:8f3;r14:8f0;q11:10f3;q13:7f1;y13:9f1;r10:10f1 ; c12: 9f2; c9: 9f2; i11: 9f7; i10: 9f4; c9: 8f3; i10: 8f2; c14: 9f0; c15: 9f0; c15: 8f3; c15: 7f3; c14: 7f2; g12: 7f0; c11 : 7f3; c10: 7f2; q9: 6f7; r10: 6f1; r9: 5f3; c11: 6f0; r10: 5f2; r11: 5f1; r9: 4f3; r10: 4f0; r11: 4f0; y12: 5f2; y13: 5f2 ; y14: 5f3; y14: 6f0; y13: 6f0; y12: 6f0; & ctm = Slow_Accepter!; Generate_the_slowest_possible_accepting_machine;:; 7; 3; 0 ;

La machine est essentiellement un compteur kilométrique fonctionnant en base trois, utilisant les symboles rouge, bleu et jaune pour représenter les chiffres 0, 1 et 2 respectivement. Le symbole vert est utilisé pour marquer la fin du numéro. Au début, la bande est initialisée avec 49 symboles rouges. Cela se fait par les pièces dans les trois premières rangées de la machine. Les quatre lignes du bas gèrent la tâche d'incrémentation du nombre dans une boucle. À chaque itération, les deux cellules de branche sur le côté gauche déterminent comment appliquer l'incrément au nombre actuel, puis les cellules de branche sur le côté droit copient les chiffres restants non affectés.

Auparavant, j'ai essayé d'estimer le temps de fonctionnement de la machine, si elle était autorisée à fonctionner jusqu'à la fin, mais à ce niveau, il est plus logique de simplement suivre le nombre d'itérations. En gros, il faut environ une minute pour terminer une itération - mais même si cela a pris une seconde, cela ne ferait que réduire le temps de fonctionnement d'un seul ordre de grandeur.

boite à pain
la source
4
Ok, j'abandonne ..
Volatilité
2
N'abandonnez pas! Je ne doute pas que cela ne fait qu'effleurer la surface. Par exemple, le compactage de la logique du compteur kilométrique par une ou deux cellules seulement permettrait une augmentation de l'ordre de grandeur du temps de fonctionnement.
boîte à pain le
5
Si cela aide, j'ai souvent soumis des réponses de golf qui étaient loin derrière le leader, simplement parce que c'était une approche différente. Une des choses que j'aime dans ce site, c'est qu'il préserve la diversité des réponses.
boîte à pain le
1
@SimplyBeautifulArt On pourrait peut-être améliorer en ayant des paires de symboles comme chiffres (auquel cas vous pourriez utiliser 15 sur 16 plutôt que 3 sur 4). Bien sûr, vous rencontriez beaucoup de difficultés avec la petite taille de la carte pour essayer de l'implémenter.
feersum
8

603: 25

Test en ligne

Je relisais les questions de Manufactoria aujourd'hui, et j'ai soudain eu une idée qui ralentirait considérablement le processus: au lieu de simplement avoir 50 valeurs et changer les couleurs 3 fois, le nouveau programme fait cela, mais après cela, il diminue la nombre de valeurs par 1, et passe à nouveau par le changement de couleur, jusqu'à ce qu'il y ait une bande vide à laquelle le programme s'arrête.

La file d'attente ne stockera pas plus de 50 valeurs à la fois, il est donc inutile d'essayer de pousser trop de valeurs sur la bande - elles sont tout simplement supprimées immédiatement. Comme auparavant, les bandes transporteuses visent à maximiser le temps nécessaire au fonctionnement de la chose. En fait, il y a eu un ajustement minimal pour obtenir une augmentation considérable de l'exécution.

Mais toujours loin de la réponse de la boîte à pain .

Volatilité
la source
Intéressant à quel point nos solutions sont similaires. Nous avons tous deux commencé avec un multiplicateur 9x6, et nous avons mis la branche et le groupe x6 au même endroit! Le vôtre est plus élégant cependant - vous avez utilisé chaque cellule et fini avec un ruban propre.
Igby Largeman
5

33:33

J'ai travaillé dessus pendant un bon moment (la volatilité a placé la barre assez haut), mais une fois que j'ai atteint 33:33, j'ai pensé que c'était un bon moment pour s'arrêter.

La stratégie est assez simple: remplissez la bande d'une couleur, puis d'une autre, puis d'une autre, et essayez toujours de parcourir autant de cellules que possible entre chaque écriture (ou groupe d'écritures).

Je suis sûr qu'il existe des moyens de trouver que nous pouvons aller beaucoup plus loin avec cela.

Castor occupé

Lien de niveau

Igby Largeman
la source
+1 Je vais voir ce que je peux faire pour le battre;) (même si je n'irai probablement pas trop loin)
Volatility