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:
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:
fuente
Respuestas:
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.
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;;
fuente
Puntuación: 15:51
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:
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:
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 ;
fuente
Puntuación 20:35
Un enfoque completamente diferente: menos partes pero considerablemente más lento.
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 ;
fuente