Manufactoria: Erzeugt das langsamste Akzeptanzprogramm


18

Schreiben Sie ein Manufactoria- Programm, das das leere Eingabeband akzeptiert. Aber mach es nicht schnell! Ich meine, schreibe das Programm schnell, aber lass es nicht schnell laufen. Je langsamer das Programm, desto besser, solange es irgendwann endet. Das folgende Beispielprogramm benötigt 3:51 (die vom Simulator gemeldete "Gesamtzeit").

Bildbeschreibung hier eingeben

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!; Generiere_die_schwachste_Abnahmemaschine;:; 7; 3; 0 ;

Ihr Programm startet mit dem leeren Band. Es muss ein bisschen kritzeln, aber irgendwann das Ausgangsquadrat erreichen. Sie können Daten auf dem Band lassen, wenn Sie möchten. Das langsamste Programm auf dem 7x7 Manufactoria-Board gewinnt!

Ihre rechte Pfeiltaste ist Ihr Freund, es beschleunigt den Simulator.

Bonuspunkte für den Absturz des Simulators!


Es gibt also keine anderen Anforderungen zum Akzeptieren / Ablehnen von Eingaben als das leere Band?
Volatility

@Volatilität: richtig.
Keith Randall

Es ist ärgerlich, dass der Simulator die Laufzeit erst meldet, wenn das Band am Ende leer ist, da es nicht der erwarteten Ausgabe der Challenge entspricht. (Zum Glück war es für mich einfach, das Band am Ende zu löschen, ohne zu viel zusätzlichen Platz zu benötigen.)
Brotkasten

Antworten:


22

~ 10 23 Iterationen ~ 10 15 Iterationen ~ 10 8 Iterationen

Manufactoria Setup

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!; Generiere_die_ langsamste_ mögliche_Akzeptiermaschine;:; 7; 3; 0 ;

Die Maschine ist im Grunde ein Kilometerzähler, der in der Basis drei läuft und die roten, blauen und gelben Symbole verwendet, um für die Ziffern 0, 1 bzw. 2 zu stehen. Das grüne Symbol kennzeichnet das Ende der Nummer. Zu Beginn wird das Band mit 49 roten Symbolen initialisiert. Dies erfolgt durch die Teile in den oberen drei Reihen der Maschine. Die unteren vier Zeilen übernehmen die Aufgabe, die Zahl in einer Schleife zu erhöhen. Bei jeder Iteration ermitteln die beiden Zweigzellen auf der linken Seite, wie das Inkrement auf die aktuelle Zahl angewendet wird, und die Zweigzellen auf der rechten Seite kopieren die verbleibenden, nicht betroffenen Ziffern.

Früher habe ich versucht, die Laufzeit der Maschine zu schätzen, wenn sie vollständig ausgeführt werden darf. Auf dieser Ebene ist es jedoch sinnvoller, nur die Anzahl der Iterationen zu berücksichtigen. Grob gesagt dauert es ungefähr eine Minute, bis eine Iteration abgeschlossen ist - aber selbst wenn es eine Sekunde dauern würde, würde dies die Laufzeit nur um eine Größenordnung verringern.


4
Ok, ich gebe auf ..
Volatility

2
Gib nicht auf! Ich habe keinen Zweifel, dass dies immer noch nur die Oberfläche kratzt. Beispielsweise würde eine Komprimierung der Kilometerzählerlogik um nur eine oder zwei Zellen eine Laufzeiterhöhung um eine Größenordnung ermöglichen.
Brotkasten


5
Wenn es hilft, habe ich oft Golfantworten eingereicht, die weit hinter dem Spitzenreiter zurückblieben, nur weil es ein anderer Ansatz war. Eines der Dinge, die ich an dieser Site liebe, ist, dass sie die Vielfalt der Antworten bewahrt.
Brotkasten

1
@SimplyBeautifulArt Es ist vorstellbar, dass sich die Zeichenpaare verbessern (in diesem Fall können Sie 15 von 16 anstelle von 3 von 4 verwenden). Natürlich stoßen Sie bei der kleinen Boardgröße auf große Schwierigkeiten, wenn Sie versuchen, dies umzusetzen.
Feersum

8

603: 25

Online-Test

Ich habe heute die Manufactoria-Fragen noch einmal durchgelesen und hatte plötzlich eine Idee, die den Prozess dramatisch verlangsamen würde: Anstatt nur 50 Werte zu haben und die Farben dreimal zu ändern, macht das neue Programm das, aber danach dekrementiert es das Anzahl der Werte um 1 und durchläuft den Farbwechsel erneut, bis ein leeres Band vorhanden ist. Zu diesem Zeitpunkt stoppt das Programm.

In der Warteschlange werden nicht mehr als 50 Werte gleichzeitig gespeichert. Es macht also keinen Sinn, zu viele Werte auf das Band zu kopieren. Sie werden einfach sofort entfernt. Die Förderbänder zielen nach wie vor darauf ab, die für den Betrieb der Sache benötigte Zeit zu maximieren. Tatsächlich wurden nur minimale Optimierungen vorgenommen, um eine enorme Laufzeitsteigerung zu erzielen.

Immer noch nicht annähernd die Antwort von breadbox.


Interessant, wie ähnlich unsere Lösungen sind. Wir haben beide mit einem 9x6-Multiplikator begonnen und den Zweig und die x6-Gruppe an die gleiche Stelle gesetzt! Ihre ist jedoch eleganter - Sie haben jede Zelle benutzt und mit einem sauberen Klebeband abgeschlossen.
Igby Largeman

5

33:33

Wir haben eine ganze Weile daran gearbeitet (die Volatilität hat die Messlatte ziemlich hoch gelegt), aber als ich 33:33 traf, dachte ich, es sei eine gute Zeit, um anzuhalten.

Die Strategie ist ziemlich klar: Füllen Sie das Band im Grunde genommen mit einer Farbe, einer anderen und einer anderen und versuchen Sie immer, so viele Zellen wie möglich zwischen den einzelnen Schreibvorgängen (oder Schreibgruppen) zu durchlaufen.

Ich bin sicher, es gibt Wege, wie wir damit noch viel weiter gehen können.

Beschäftigter Biber

Level Link


+1 Ich werde sehen, was ich tun kann, um es zu schlagen;) (obwohl ich wahrscheinlich nicht zu weit kommen werde)
Volatility
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.