58 43 bagian
http://pleasingfungus.com/Manufactoria/?lvl=33&code=c16:9f0;q15:9f3;q14:9f3;q13:9f3;c12:9f3;c15:10f1;r15:10f3;r14:10f3;r13: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; : 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; Input: _binary_number_big_endian._mutputar _mutputar _mutputar _mutputar _mutputar _mutputar _mutputar_pengaturan : | brrr: b | brrrr: br | bb: bb | bbrrb: brr | brrrrb: brb | bbrb: bbr; 13; 3; 1 ;
Gagasan Keith Randall untuk pertama kali mengkonversi input ke unary cukup bagus, jadi saya mencurinya. ;-) Mudahnya, saya baru saja menghabiskan waktu mengoptimalkan konverter biner-ke-unary kecil di Manufactoria , jadi pilih saja salah satu solusi saya yang hampir berfungsi * dari tantangan itu dan kombinasikan dengan penghitung mod-7 yang cepat dioptimalkan.
Desain ini sekarang pada titik di mana hanya mendapatkan robot dari atas ke bawah mulai membutuhkan konveyor tambahan yang tidak berguna. Pengurangan bagian lebih lanjut yang signifikan mungkin akan datang dari mendesain ulang tata letak menjadi lebih tinggi dan lebih sempit.
(* Tantangan itu membutuhkan a) desain agar sesuai dengan papan 7 × 7, dan b) output unary berada dalam marker merah. Jika Anda melihat bagian konverter biner ke unary dari mesin di atas, Anda akan perhatikan bahwa, dengan satu atau dua bagian tambahan, ia dapat dengan mudah memenuhi kedua persyaratan, tetapi sayangnya, tidak keduanya.)
Berikut versi 58-bagian sebelumnya:
http://pleasingfungus.com/Manufactoria/?lvl=32&code=g12:f3;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; c11: 10f2; : 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: cf: : 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 ; Masukan: _binary_number_big_endian._Output: _that_binary_number_mod_7; bbb: | brrr: b | brrrr: br | bb: bb | bbrrb: brr | brrrrb: brb | bbrb: bbr; 13; 3; 1 ;
Seperti solusi Jan Dvorak , ini juga didasarkan pada FSM 7-negara. Saya telah memberi label pada gerbang yang terkait dengan setiap kondisi di tangkapan layar untuk membuatnya lebih mudah dibaca. Mesin negara itu sendiri, bagaimanapun, benar-benar bagian yang mudah; bagian yang sulit adalah menghasilkan hasil akhir dengan jumlah gerbang minimal.
Salah satu trik yang saya temukan berguna adalah copy putaran terakhir yang menggeser-geser semua yang ditulis sebelum penanda kuning ke ujung (sementara juga melepas penanda hijau): ini memungkinkan saya untuk menggunakan pengulangan dalam bit output orde tinggi oleh menghasilkan output sebagai:
0: Y ->
1: BY -> B
2: YBR -> BR
3: YBB -> BB
4: RYBR -> BRR
5: BYBR -> BRB
6: RYBB -> BBR
Ini memungkinkan saya sebagian besar menggabungkan jalur output untuk output 2, 4 dan 5 (yang semuanya dimulai dengan BR
) dan 3 dan 6 (yang dimulai dengan BB
).