58 43 partes
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; Entrada: _binary_number_big_endian._Outmod :_t_bmber__bq : | brrr: b | brrrr: br | bb: bb | bbrrb: brr | brrrrb: brb | bbrb: bbr; 13; 3; 1 ;
La idea de Keith Randall de convertir primero la entrada a unario fue bastante buena, así que la robé. ;-) Convenientemente, acabo de pasar un tiempo optimizando pequeños convertidores binarios a unarios en Manufactoria , así que elegí una de mis soluciones * casi operativas de ese desafío y la combiné con un contador mod-7 rápidamente optimizado.
Este diseño se encuentra ahora en el punto en el que simplemente llevar los robots de arriba hacia abajo comienza a requerir transportadores adicionales que de otra manera serían inútiles. Probablemente, cualquier otra reducción significativa de piezas vendrá de rediseñar el diseño para que sea más alto y estrecho.
(* Ese desafío requería a) que el diseño encajara en una placa de 7 × 7, yb) la salida unaria debía estar en marcadores rojos. Si observa la parte del convertidor binario a unario de la máquina anterior, notará que, con una o dos partes adicionales, puede cumplir fácilmente cualquiera de los requisitos, pero lamentablemente, no ambos).
Aquí está la versión anterior de 58 partes:
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 ; Entrada: _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 ;
Al igual que la solución de Jan Dvorak , esto también se basa en un FSM de 7 estados. He etiquetado las puertas correspondientes a cada estado en la captura de pantalla para que sea más fácil de leer. La máquina de estado en sí misma, sin embargo, es realmente la parte fácil; La parte difícil es generar el resultado final con un número mínimo de puertas.
Un truco que encontré útil fue el bucle de copia final que desplaza todo lo escrito antes del marcador amarillo hasta el final (mientras también quita el marcador verde): esto me permitió hacer uso de la repetición en los bits de salida de alto orden generando las salidas como:
0: Y ->
1: BY -> B
2: YBR -> BR
3: YBB -> BB
4: RYBR -> BRR
5: BYBR -> BRB
6: RYBB -> BBR
Esto me permite combinar principalmente las rutas de salida para las salidas 2, 4 y 5 (que comienzan con BR
) y 3 y 6 (que comienzan con BB
).