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._Output: _that_binary_number; : | brrr: b | brrrr: br | bb: bb | bbrrb: brr | brrrrb: brb | bbrb: bbr; 13; 3; 1 ;
A idéia de Keith Randall de primeiro converter a entrada em unária foi muito boa, então eu a roubei. ;-) Convenientemente, eu havia passado algum tempo otimizando pequenos conversores binários para unários em Manufactoria , então escolhi uma das minhas soluções quase em funcionamento * desse desafio e a combinei com um contador mod-7 rapidamente otimizado.
Esse projeto está agora no ponto em que apenas colocar os robôs de cima para baixo começa a exigir transportadores extras inúteis. Quaisquer reduções adicionais significativas de peças provavelmente virão da reformulação do layout para ser mais alto e mais estreito.
(* Esse desafio exigia a) o design para caber em uma placa 7 × 7 eb) a saída unária em marcadores vermelhos. Se você olhar a parte do conversor binário para unário da máquina acima, notará que, com uma ou duas partes extras, ela pode satisfazer facilmente qualquer um dos requisitos, mas, infelizmente, não os dois.)
Aqui está a versão 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 ; Input: _nome_binário_big_endiano._ Saída: _número_de_binário_mod_7; bbb: | brrr: b | brrrr: br | bb: bb | bbrrb: brr | brrrrb: brb | bbrb: bbr; 13; 3; 1 ;
Como a solução de Jan Dvorak , isso também é baseado em um FSM de 7 estados. Marquei as portas correspondentes a cada estado na captura de tela para facilitar a leitura. A própria máquina de estado, no entanto, é realmente a parte mais fácil; a parte complicada é gerar a saída final com um número mínimo de portas.
Um truque que achei útil foi o loop de cópia final que muda tudo o que foi escrito antes do marcador amarelo até o fim (além de remover o marcador verde): isso me permitiu usar a repetição nos bits de saída de alta ordem gerando as saídas como:
0: Y ->
1: BY -> B
2: YBR -> BR
3: YBB -> BB
4: RYBR -> BRR
5: BYBR -> BRB
6: RYBB -> BBR
Isso permite que eu combine principalmente os caminhos de saída das saídas 2, 4 e 5 (que começam com BR
) e 3 e 6 (que começam com BB
).