Divida rapidamente em Manufactoria

10

fundo

O Manufactoria foi comercializado como um jogo, mas nós, jogadores de código, podemos vê-lo como realmente é: uma linguagem de programação bidimensional. A linguagem de programação Manufactoria é baseada em uma única fila , que contém uma série de marcadores coloridos. O ponteiro de instruções se move pelo tabuleiro de jogo usando correias transportadoras e encontra uma série de gravadores e ramificações que lêem e gravam na fila.

O idioma é muito fácil de entender; portanto, a maneira mais rápida de aprender é jogar os primeiros níveis do jogo (link acima).

Desafio

Seu desafio é criar um programa que possa dividir um número por outro na menor quantidade de tempo.

A entrada para o programa será uma sequência de marcadores azuis X seguidos por marcadores Y vermelhos. A saída necessária será uma sequência de marcadores vermelhos com um comprimento de X / Y.

O tabuleiro de jogo a ser usado é encontrado neste nível oficial do concurso:

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

É 13x13 (tamanho máximo) e é pré-equipado com os testes corretos (consulte a seção de pontuação).

Pontuação

A pontuação do seu programa é a quantidade total de tempo que leva para o programa passar em todos os testes no nível oficial da competição. O tempo total é fornecido na tela de nível completo.

Durante a execução dos testes, você provavelmente precisará usar o controle deslizante de aceleração de 50x no canto inferior esquerdo para receber os resultados rapidamente (a aceleração do tempo não afeta a pontuação).

Aqui está uma lista de problemas de divisão envolvidos nos testes:

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

Exemplo de E / S

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: 
PhiNotPi
fonte
Coisas legais, esse jogo! Realmente não deu tempo para jogar golfe hoje em dia, mas lembre-se disso.
tomsmeding

Respostas:

6

Pontuação 3:29

Também pode dividir por 1,2,3,4. Torna muito mais rápido.

insira a descrição da imagem aqui

http://pleasingfungus.com/Manufactoria/?lvl=34&code=c9:13f2;c10:13f2;c11:13f2;p12:2f7;y13:2f0;p11:2f0;c11:4f3;c10:3f0;p11:5f0 ; c10: 5f0; c9: 5f0; c11: 6f3; p11: 7f0; c10: 7f0; p11: 3f0; r10: 6f1; q8: 5f4; q8: 6f1; q9: 6f1; c7: 5f3; c7: 6f3; q10 : 2f0; r10: 1f3; r10: 4f1; q9: 3f4; q9: 4f1; c9: 2f3; c8: 3f3; c8: 4f3; r10: 8f1; q10: 9f6; q9: 9f1; q9: 8f4; q9: 7f4 ; c8: 8f3; c8: 9f3; c8: 10f3; c8: 11f3; c8: 12f3; c8: 13f2; c7: 7f2; c8: 7f3; r11: 9f3; r11: 10f0; r10: 10f0; r9: 10f3; r9 : 11f2; p11: 11f6; r11: 12f1; g11: 8f3; b10: 11f2; c16: 10f2; q17: 10f6; q17: 11f3; g18: 11f0; c12: 11f1; c12: 10f2; c13: 10f2; c14: 10f2 ; c15: 10f2; c17: 12f0; p16: 12f4; c16: 11f3; c16: 13f1; q15: 12f0; r15: 13f1; c14: 12f3; c14: 13f0; c13: 13f0; q17: 7f6; q17: 9f1; q18 : 9f6; q18: 8f5; q17: 6f1; g16: 6f2; y18: 6f0; p17: 5f5; r18: 5f0; c16: 5f0; p15: 5f0; r15: 6f3; b15: 7f2; p16: 7f6; r16: 8f1 ; q14: 5f0; y14: 4f3; g14: 6f1; p13: 5f0; p13: 6f0; p13: 7f0; p13: 8f0; p13: 9f1; g12: 9f0; c17: 8f1; & ctm = Divide_and_Conquer;Rbrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr;

Keith Randall
fonte
Eu deveria ter previsto isso, mas de qualquer maneira um bom trabalho. Eu gostaria que o mecanismo de jogo me permitisse criar mais de 8 casos de teste. Devo criar mais desafios de Manufactoria no futuro?
PhiNotPi
11
Claro, eu gosto deles.
Keith Randall
4

Pontuação: 15:51

insira a descrição da imagem aqui

Divide por subtração repetida. Usa um Y entre o R para acompanhar quanto divisor subtraímos até agora. Usa Gs para contar o quociente.

Por exemplo, o estado no início de cada loop externo (logo após o gravador G inicial) para 12/4 é:

BBBBBBBBBBBB RRRR G
BBBBBBBB RRRR GG
BBBB RRRR GGG
RRRR GGGG

Quando não há Bs restantes, o gadget na parte inferior esquerda retira Rs e depois gera # G-1 Rs.

O loop interno retira um B de cada vez e usa Y para controlar a posição. Começando no loop externo:

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

O loop interno é a caixa 3x4 no canto inferior direito. O layout do resto provavelmente pode ser melhorado um pouco, mas o loop interno é apertado.

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 = Divide_and_Conquer; Input_will_be_X_blues_followed_by_Y_reds, rbb: r : rrrr | r: | bbbbbbbbbbbbrrrr: rrr | bbbbbbbbbbbbrrr: rrrr | bbbbbbbbbrrr: rrr | bbbbbbbbbbrrr: rrrrr; 13; 3; 0 ;

Keith Randall
fonte
Reorganizando drasticamente as partes do seu design, consegui reduzir a pontuação para 13:28 com 53 partes.
PhiNotPi
2

Pontuação 20:35

Uma abordagem completamente diferente - menos peças, mas consideravelmente mais lenta.

solução div

http://pleasingfungus.com/Manufactoria/?lvl=34&code=p12:2f3;g11:2f3;b11:3f3;c12:4f2;c11:4f2;c13:2f3;c13:3f3;c13:4f3;c12:5f3 ; c11: 5f1; c10: 5f2; c9: 8f3; c9: 9f3; c10: 11f2; c11: 11f1; c11: 9f1; c11: 10f1; c11: 12f2; c13: 8f0; c11: 8f0; c13: 7f0; c14 : 7f0; c14: 6f3; c12: 7f3; y14: 5f0; y10: 6f1; y11: 7f1; g12: 6f2; g9: 11f2; g10: 10f0; q9: 10f3; q13: 5f7; q13: 6f7; b11: 6f1 ; b10: 9f1; p10: 7f1; r9: 7f2; p10: 8f4; p12: 8f3; q12: 12f3; r13: 12f0; r8: 10f2; c12: 9f3; c12: 10f3; c12: 11f3; & ctm = Divide_and_Conquer_ Input_byill_Y_ , _output_X / Y_reds; bbbbbbrr: rrr | bbbrrr: r | bbbbr: rrrr | r: | bbbbbbbbbbbbrrrr: rrr | bbbbbbbbbbbbrrr: rrrr | bbbbbbbbbrrr: rrr | bbbbbbbbbbrr: rrrrr; 13; 3; 0 ;

Howard
fonte