Teilen Sie sich schnell in Manufactoria


10

Hintergrund

Manufactoria wurde als Spiel vermarktet, aber wir Code-Golfer können es als das sehen, was es wirklich ist: eine zweidimensionale Programmiersprache. Die Programmiersprache Manufactoria basiert auf einer einzelnen Warteschlange , die eine Reihe bunter Markierungen enthält. Der Anweisungszeiger bewegt sich mit Förderbändern auf dem Spielbrett und trifft auf eine Reihe von Schreibern und Zweigen, die aus der Warteschlange lesen und in diese schreiben.

Die Sprache ist sehr leicht zu verstehen. Der schnellste Weg, sie zu erlernen, besteht darin, die ersten Level des Spiels zu spielen (siehe oben).

Herausforderung

Ihre Herausforderung besteht darin, ein Programm zu erstellen, das in kürzester Zeit eine Zahl durch eine andere Zahl teilen kann.

Die Eingabe in das Programm besteht aus einer Folge von X blauen Markierungen, gefolgt von Y roten Markierungen. Die erforderliche Ausgabe ist eine Reihe roter Markierungen mit einer Länge von X / Y.

Das zu verwendende Spielbrett befindet sich in diesem offiziellen Wettbewerbslevel:

http://pleasingfungus.com/Manufactoria/?ctm=Divide_and_Conquer;Input_will_be_X_blues_followed_by_Y_reds,_output_X/Y_reds;bbbbbbrr:rrr|bbbrrr:r|bbbbr:rrrr|r:|bbbbbbbbbbbbrrrr:rrr|bbbbbbbbbbbbrrr:rrrr|bbbbbbbbbrrr:rrr|bbbbbbbbbbrr: rrrrr; 13; 3; 0

Es ist 13x13 (die maximale Größe) und mit den richtigen Tests ausgestattet (siehe Abschnitt Bewertung).

Wertung

Die Punktzahl Ihres Programms gibt die Gesamtzeit an, die das Programm benötigt, um alle Tests in der offiziellen Wettbewerbsstufe zu bestehen. Die Gesamtzeit wird auf dem Level-Complete-Bildschirm angezeigt.

Während Sie die Tests ausführen, müssen Sie höchstwahrscheinlich den 50-fachen Beschleunigungsregler unten links verwenden, um die Ergebnisse schnell zu erhalten (Zeitbeschleunigung hat keinen Einfluss auf die Punktzahl).

Hier ist eine Liste der Teilungsprobleme, die an den Tests beteiligt sind:

 6/2 = 3
 3/3 = 1
 4/1 = 4
 0/1 = 0
12/4 = 3
12/3 = 4
 9/3 = 3
10/2 = 5

Beispiel E / A.

12/3=4
in:  BBBBBBBBBBBBRRR
out: RRRR

10/2=5
in:  BBBBBBBBBBRR
out: RRRRR

9/3=3
in:  BBBBBBBBBRRR
out: RRR

0/1=0
in:  R
out: 

Cooles Zeug, dieses Spiel! Ich habe heutzutage nicht wirklich Zeit zum Golfen gegeben, werde mich aber daran erinnern.
Tomsmeding

Antworten:


6

Ich hätte das vorhersagen sollen, aber trotzdem gute Arbeit. Ich wünschte, die Spiel-Engine hätte mir erlaubt, mehr als 8 Testfälle zu erstellen. Sollte ich in Zukunft weitere Manufactoria-Herausforderungen schaffen?
PhiNotPi

1
Klar, ich mag sie.
Keith Randall

4

Ergebnis: 15:51

Geben Sie hier die Bildbeschreibung ein

Teilung durch wiederholte Subtraktion. Verwendet ein Y unter dem R, um zu verfolgen, wie viel Divisor wir bisher subtrahiert haben. Verwendet Gs, um den Quotienten zu zählen.

Zum Beispiel ist der Zustand am Anfang jeder äußeren Schleife (direkt nach dem anfänglichen G-Writer) für 12/4:

BBBBBBBBBBBB RRRR G
BBBBBBBB RRRR GG
BBBB RRRR GGG
RRRR GGGG

Wenn kein Bs mehr vorhanden ist, entfernt das Gadget unten links Rs und gibt dann # G-1 Rs aus.

Die innere Schleife entfernt jeweils ein B und verwendet Y, um die Position zu verfolgen. Beginnend an der äußeren Schleife:

BBBBBBBB RRRR GG
BBBBBBB RYRRR GG
BBBBBB RRYRR GG
BBBBB RRRYR GG
BBBB RRRR GG

Die innere Schleife ist die 3x4-Box unten rechts. Das Layout des Restes kann wahrscheinlich etwas verbessert werden, aber die innere Schleife ist eng.

http://pleasingfungus.com/Manufactoria/?lvl=34&code=c11:13f2;g12:2f3;p12:3f7;c13:3f3;p13:4f3;b12:4f2;r14:4f3;p14:7f7;r13:7f2 ; q14: 8f7; g13: 8f2; p14: 9f4; r13: 10f2; p14: 10f7; b15: 10f0; q14: 11f7; p15: 11f3; r16: 11f1; p15: 8f0; r15: 9f1; c16: 8f0; c13 : 2f0; c15: 2f0; c16: 2f0; c17: 2f0; c11: 3f3; c11: 4f3; c11: 6f3; c11: 7f3; c11: 8f3; c11: 9f3; c11: 5f3; p11: 10f7; q11: 11f6 ; q11: 12f7; r10: 12f2; c10: 10f2; q16: 10f5; y14: 6f3; q14: 5f3; g15: 5f1; c15: 4f1; c15: 3f1; c17: 9f1; c17: 8f1; c17: 7f1; c17 : 6f1, c17, 5f1, c17, 4f1, c17, 3f1, y16, 9f1, g17, 10f1, q14, 2f4, g14, 1f3, & ctm : rrrr | r: | bbbbbbbbbbbrrrr: rrr | bbbbbbbbbbrrr: rrrr | bbbbbbbbrrr: rrr | bbbbbbbbbrr: rrrrr; 13; 3; 0 ;


Durch die drastische Neuanordnung der Teile Ihres Designs konnte ich die Punktzahl mit 53 Teilen auf 13:28 reduzieren.
PhiNotPi

2
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.