58 43 Teile
http://pleasingfungus.com/Manufactoria/?lvl=33&code=c16:9f0;q15:9f3;q14:9f3;q13:9f3;c12:9f3;c16:10f1;r15:10f3;r14:10f3;b13:10f3 ; q12: 10f4; p11: 10f4; c16: 11f1; i15: 11f7; q14: 11f7; q13: 11f7; q12: 11f7; c11: 11f2; r15: 12f3; b14: 12f3; c12: 12f3; c15: 13f0; c14 : 13f0; c13: 13f0; r13: 12f3; y10: 3f3; c10: 4f2; g10: 5f1; q10: 6f4; y11: 3f0; q11: 4f6; r11: 5f3; p11: 6f4; b11: 7f1; i12: 4f7 ; c12: 5f3; q12: 6f0; g12: 2f3; c12: 3f3; p13: 4f6; y13: 3f0; c13: 5f0; c12: 7f3; b12: 8f3; & ctm = Mod7; : | brrr: b | brrrr: br | bb: bb | bbrrb: brr | brrrb: brb | bbrb: bbr; 13; 3; 1 ;
Keith Randalls Idee , die Eingabe zuerst in unary umzuwandeln, war ziemlich gut, also habe ich sie gestohlen. ;-) Praktischerweise hatte ich gerade einige Zeit damit verbracht, kleine Binär-Unär-Wandler in Manufactoria zu optimieren , also wählte ich einfach eine meiner fast funktionierenden Lösungen * aus dieser Herausforderung und kombinierte sie mit einem schnell optimierten Mod-7-Zähler.
Diese Konstruktion ist jetzt an dem Punkt angelangt, an dem nur die Roboter von oben nach unten bewegt werden müssen, um ansonsten unnütze zusätzliche Förderbänder zu benötigen. Alle wesentlichen weiteren Teileeinsparungen ergeben sich wahrscheinlich aus der Neugestaltung des Layouts, damit es größer und schmaler wird.
(* Diese Herausforderung erforderte, dass a) das Design auf eine 7 × 7-Platine passt und b) die unäre Ausgabe in roten Markierungen vorliegt. Wenn Sie sich den obigen Binär-zu-Unär-Konverter-Teil der Maschine ansehen, werden Sie feststellen, dass er mit ein oder zwei zusätzlichen Teilen problemlos beide Anforderungen erfüllen kann, aber leider nicht beide.)
Hier ist die vorherige 58-teilige Version:
http://pleasingfungus.com/Manufactoria/?lvl=32&code=g12:2f3;q13:13f5;c14:13f0;c15:12f3;c9:6f2;c9:7f1;c9:8f1;c9:9f1;c10:4f3 c10: 5f3, i10: 6f5, c10: 7f2, c10: 9f0, b11: 3f2, p11: 4f1, c11: 5f1, p11: 6f2, p11: 7f2, c11: 8f3, p11: 9f3, b11: 10f2, c12 : 3f2; c12: 4f2; c12: 5f0; r12: 6f3; c12: 7f3; i12: 8f1; i12: 9f5; y12: 10f3; c13: 3f2; c13: 4f3; i13: 5f1; c13: 6f3; c13: 7f2 i13: 8f0; c13: 9f1; c14: 3f3; c14: 4f2; p14: 5f5; c14: 6f1; p14: 7f6; p14: 8f7; r14: 9f3; c15: 4f3; q15: 5f0; c15: 6f3; c15 : 7f3; i15: 8f6; c15: 9f3; q15: 10f7; c15: 11f3; r12: 12f2; p13: 12f7; b14: 12f0; b14: 11f3; b12: 11f3; y14: 10f3; y15: 13f0; & ctm = Mod7 ; Eingabe: _binary_number_big_endian._Output: _that_binary_number_mod_7; bbb: | brrr: b | brrrr: br | bb: bb | bbrrb: brr | brrrb: brb | bbrb: bbr; 13; 1 ;
Wie die Lösung von Jan Dvorak basiert auch diese auf einem FSM mit sieben Zuständen. Ich habe die Gates für jeden Status im Screenshot beschriftet, um das Lesen zu erleichtern. Die Staatsmaschine selbst ist jedoch wirklich der einfache Teil; Der knifflige Teil ist das Erzeugen der endgültigen Ausgabe mit einer minimalen Anzahl von Gattern.
Ein Trick, den ich nützlich fand, war die letzte Kopierschleife, die alles, was vor dem gelben Marker geschrieben wurde, tonnenweise ans Ende verschiebt (und gleichzeitig den grünen Marker abstreift): Dadurch konnte ich die Wiederholung in den höherwertigen Ausgabebits von nutzen Generieren der Ausgaben als:
0: Y ->
1: BY -> B
2: YBR -> BR
3: YBB -> BB
4: RYBR -> BRR
5: BYBR -> BRB
6: RYBB -> BBR
Dadurch kann ich meistens die Ausgabepfade für die Ausgänge 2, 4 und 5 (die alle mit beginnen BR
) und 3 und 6 (die mit beginnen BB
) kombinieren .