Divide rápidamente en Manufactoria

10

Antecedentes

Manufactoria se ha comercializado como un juego, pero los golfistas de código podemos verlo como lo que realmente es: un lenguaje de programación bidimensional. El lenguaje de programación Manufactoria se basa en una sola cola , que contiene una serie de marcadores coloridos. El puntero de instrucciones se mueve alrededor del tablero de juego usando cintas transportadoras, y encuentra una serie de escritores y ramas que leen y escriben en la cola.

El lenguaje es muy fácil de entender, por lo que la forma más rápida de aprenderlo es jugar los primeros niveles del juego (vinculado anteriormente).

Desafío

Su desafío es crear un programa que pueda dividir un número por otro número en el menor tiempo posible.

La entrada al programa será una cadena de X marcadores azules seguidos de Y marcadores rojos. La salida requerida será una cadena de marcadores rojos con una longitud de X / Y.

El tablero de juego que se utilizará se encuentra en este nivel oficial del concurso:

liqúo rrrrr; 13; 3; 0

Es 13x13 (el tamaño máximo) y está pre-equipado con las pruebas correctas (vea la sección de puntuación).

Puntuación

El puntaje de su programa es la cantidad total de tiempo que le toma al programa pasar todas las pruebas en el nivel oficial del concurso. El tiempo total se da en la pantalla de nivel completo.

Mientras ejecuta las pruebas, lo más probable es que tenga que usar el control deslizante de aceleración 50x en la parte inferior izquierda para recibir los resultados rápidamente (la aceleración de tiempo no afecta la puntuación).

Aquí hay una lista de problemas de división involucrados en las pruebas:

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

Ejemplo 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
fuente
Cosas geniales, ese juego! Realmente no he dado tiempo al golf en estos días, pero recordaré esto.
tomsmeding

Respuestas:

6

Puntuación 3:29

También podría ser un caso especial dividido por 1,2,3,4. Lo hace mucho más rápido.

ingrese la descripción de la imagen aquí

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;Input_will_be_X_blues_followed_by_Y_reds, _output_X / Y_reds; bbbbbbrr: rrr | bbbrrr: r | bbbbr: rrrr | r: | bbbbbbbbbbbbrrrr: rrr | bbbbbbbbbbbbrrr: rrrr | bbb; rbb: rbb: rbb;;

Keith Randall
fuente
Debería haber predicho esto, pero de todos modos buen trabajo. Desearía que el motor del juego me permitiera crear más de 8 casos de prueba. ¿Debo crear más desafíos de Manufactoria en el futuro?
PhiNotPi
1
Claro, me gustan.
Keith Randall
4

Puntuación: 15:51

ingrese la descripción de la imagen aquí

Hace la división por sustracción repetida. Utiliza una Y entre las R para realizar un seguimiento de cuánto divisor hemos restado hasta ahora. Utiliza Gs para contar el cociente.

Por ejemplo, el estado al comienzo de cada bucle externo (justo después del escritor G inicial) para 12/4 es:

BBBBBBBBBBBB RRRR G
BBBBBBBB RRRR GG
BBBB RRRR GGG
RRRR GGGG

Cuando no quedan Bs, el dispositivo en la parte inferior izquierda elimina Rs y luego genera # G-1 Rs.

El bucle interno elimina una B a la vez y usa Y para realizar un seguimiento de la posición. Comenzando en el bucle externo:

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

El bucle interno es el cuadro de 3x4 en la parte inferior derecha. El diseño del resto probablemente se puede mejorar un poco, pero el bucle interno es estrecho.

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, _output_X: rbbrbrr. : rrrr | r: | bbbbbbbbbbbbrrrr: rrr | bbbbbbbbbbbbrrr: rrrr | bbbbbbbbbrrr: rrr | bbbbbbbbbbrr: rrrrr; 13; 3; 0 ;

Keith Randall
fuente
Al reorganizar drásticamente las partes de su diseño, he podido reducir el puntaje a 13:28 con 53 partes.
PhiNotPi
2

Puntuación 20:35

Un enfoque completamente diferente: menos partes pero considerablemente más lento.

solución 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; , _output_X / Y_reds; bbbbbbrr: rrr | bbbrrr: r | bbbbr: rrrr | r: | bbbbbbbbbbbbrrrr: rrr | bbbbbbbbbbbbrrr: rrrr | bbbbbbbbbrrr: rrr | bbbbbbbbbbrr: r; rrrr ;

Howard
fuente