Manufactoria: generar el programa de aceptación más lento posible


18

Escriba un programa Manufactoria que acepte la cinta de entrada vacía. ¡Pero no lo hagas rápido! Quiero decir, escribe el programa rápidamente, pero no dejes que se ejecute rápidamente. Cuanto más lento sea el programa, mejor, siempre que termine eventualmente. El siguiente programa de ejemplo toma 3:51 (el "tiempo total" informado por el simulador).

ingrese la descripción de la imagen aquí

http://pleasingfungus.com/Manufactoria/?lvl=36&code=g12:5f3;r9:8f1;p12:9f3;c13:9f0;r11:9f0;r10:9f0;r9:9f1;b11:8f0;b10:8f1 ; r9: 7f2; c10: 7f2; c11: 7f2; c12: 7f3; q12: 8f3; y13: 8f2; y14: 8f2; y15: 8f1; y15: 7f0; y14: 7f0; y13: 7f0; g12: 6f3; & ctm = Slow_Accepter!; Generate_the_slowest_possible_accepting_machine;:; 7; 3; 0 ;

Su programa comienza con la cinta vacía. Debe garabatear un poco, pero eventualmente alcanzar el cuadrado de salida. Puede dejar datos en la cinta si lo desea. ¡El programa más lento en el tablero 7x7 de Manufactoria gana!

Tu tecla de flecha derecha es tu amigo, acelera el simulador.

¡Puntos de bonificación por estrellar el simulador!


Entonces, ¿no hay requisitos para aceptar / rechazar entradas que no sean la cinta vacía?
Volatilidad

@Volatilidad: correcta.
Keith Randall el

Molesto, el simulador no informará el tiempo de ejecución a menos que la cinta esté vacía al final, ya que no coincide con la salida esperada del desafío. (Afortunadamente, fue fácil para mí borrar la cinta al final sin necesitar demasiado espacio adicional.)
breadbox

Respuestas:


22

~ 10 23 iteraciones ~ 10 15 iteraciones ~ 10 8 iteraciones

Configuración de manufactura

http://pleasingfungus.com/Manufactoria/?lvl=32&code=g9:7f2;b12:8f2;p13:8f5;p11:8f3;r14:8f0;q11:10f3;q13:7f1;y13:9f1;r10:10f1 ; c12: 9f2; c9: 9f2; i11: 9f7; i10: 9f4; c9: 8f3; i10: 8f2; c14: 9f0; c15: 9f0; c15: 8f3; c15: 7f3; c14: 7f2; g12: 7f0; c11 : 7f3; c10: 7f2; q9: 6f7; r10: 6f1; r9: 5f3; c11: 6f0; r10: 5f2; r11: 5f1; r9: 4f3; r10: 4f0; r11: 4f0; y12: 5f2; y13: 5f2 ; y14: 5f3; y14: 6f0; y13: 6f0; y12: 6f0; & ctm = Slow_Accepter!; Generate_the_slowest_possible_accepting_machine;:;; 7; 3; 0 ;

La máquina es básicamente un odómetro que se ejecuta en la base tres, usando los símbolos rojo, azul y amarillo para representar los dígitos 0, 1 y 2, respectivamente. El símbolo verde se usa para marcar el final del número. Al principio, la cinta se inicializa con 49 símbolos rojos. Esto lo hacen las partes en las tres filas superiores de la máquina. Las cuatro filas inferiores manejan la tarea de incrementar el número en un bucle. En cada iteración, las dos celdas de ramificación en el lado izquierdo determinan cómo aplicar el incremento al número actual, y luego las celdas de ramificación en el lado derecho copian los dígitos restantes, no afectados.

Anteriormente intenté estimar el tiempo de funcionamiento de la máquina, si se permitía que se ejecutara hasta su finalización, pero a este nivel tiene más sentido ir por el número de iteraciones. Hablando en términos generales, toma alrededor de un minuto completar una iteración, pero incluso si tomara un segundo, solo disminuiría el tiempo de ejecución en un solo orden de magnitud.


44
Ok, me rindo ..
Volatilidad

2
¡No te rindas! No tengo dudas de que esto todavía solo está rascando la superficie. Por ejemplo, la compactación de la lógica del cuentakilómetros con solo una o dos celdas permitiría un aumento de orden de magnitud en el tiempo de ejecución.
breadbox


55
Si ayuda, a menudo he enviado respuestas de golf que estaban muy por detrás del líder, solo porque era un enfoque diferente. Una de las cosas que me encanta de este sitio es que conserva la diversidad de respuestas.
breadbox

1
@SimplyBeautifulArt One posiblemente podría mejorar al tener pares de símbolos como dígitos (en cuyo caso, podría usar 15 de 16 en lugar de 3 de 4). Por supuesto, te encontrarás con muchas dificultades con el pequeño tamaño de la placa al tratar de implementar eso.
feersum

8

603: 25

Prueba en línea

Hoy estaba releyendo las preguntas de Manufactoria, y de repente tuve una idea que ralentizaría drásticamente el proceso: en lugar de solo tener 50 valores y cambiar los colores 3 veces, el nuevo programa hace eso, pero luego, disminuye el número de valores en 1, y pasa por el cambio de color nuevamente, hasta que haya una cinta vacía en la que el programa se detiene.

La cola no almacenará más de 50 valores a la vez, por lo que no sirve de nada tratar de insertar demasiados valores en la cinta, simplemente se eliminan de inmediato. Como antes, las cintas transportadoras tienen como objetivo maximizar el tiempo necesario para que la cosa funcione. De hecho, hubo ajustes mínimos para lograr un tremendo aumento en el tiempo de ejecución.

Sin embargo, aún no está cerca de la respuesta de breadbox.


Interesante lo similares que son nuestras soluciones. Ambos comenzamos con un multiplicador de 9x6, ¡y colocamos la rama y el grupo x6 en el mismo lugar! Sin embargo, el tuyo es más elegante: utilizaste cada celda y terminaste con una cinta limpia.
Igby Largeman

5

33:33

Trabajé en esto durante bastante tiempo (la volatilidad puso el listón bastante alto), pero una vez que llegué a 33:33, pensé que era un buen momento para parar.

La estrategia es bastante contundente: básicamente llena la cinta con un color, luego con otro, y luego con otro, y siempre trata de atravesar tantas celdas como sea posible entre cada escritura (o grupo de escrituras).

Estoy seguro de que hay maneras de encontrar que podemos ir mucho más lejos con esto.

Castor ocupado

Enlace de nivel


+1 Veré qué puedo hacer para vencerlo;) (aunque probablemente no llegaré demasiado lejos)
Volatilidad
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.