Pruebas de primaria en Manufactoria

13

Antecedentes

Manufactoria es un juego sobre programación. El jugador debe usar una forma de lenguaje de programación bidimensional para completar las tareas. Si nunca has oído hablar de él, la forma más fácil de aprender es probar los primeros niveles del juego.

Desafío

Su desafío es crear un programa que pruebe la primalidad de un número.

La entrada será una serie de N marcadores azules en la cola. Si N es primo, entonces su programa debería aceptarlo (mover el robot hasta el final). Si N es compuesto, entonces su programa debería rechazarlo (colóquelo en el piso en alguna parte).

Opciones de envío

Dado que este es un desafío más complejo que el desafío típico de Manufactoria, he decidido permitir más formas de enviar sus respuestas.

Vainilla

He creado un nivel personalizado de 13x13 para crear y probar envíos. El nivel de prueba personalizado es el siguiente.

Nivel personalizado 13x13

El juego solo permite 8 casos de prueba en un nivel personalizado, pero su creación debería ser teóricamente capaz de manejar cualquier número natural N, limitado solo por la memoria disponible. Para fines informativos, los casos de prueba proporcionados en el nivel personalizado son los siguientes:

1 -> reject
2 -> accept
4 -> reject
5 -> accept
7 -> accept
9 -> reject
11-> accept
15-> reject

Rejilla Expandida

Algunos usuarios pueden querer más espacio que una cuadrícula de 13x13. Aquí hay un enlace a un nivel personalizado de 15x15 en el juego, creado al cambiar un número en la URL:

15x15 nivel personalizado

Lamentablemente, los niveles personalizados más grandes no funcionan, ya que las celdas adicionales son inaccesibles.

La Manufactoria Esolang

Ha habido una adaptación de Manufactoria a un lenguaje basado en ASCII. Si desea una forma diferente de diseñar / probar su creación, o si no puede ajustar su solución final en el tablero de juego, puede usar este esolang. Puede encontrar información sobre este esolang aquí:

Manufactoria esolang

Hay algunas discrepancias entre el esolang y el juego real. Por ejemplo, los cruces de transportadores se manejan de manera diferente. Intente evitar aprovechar estas discrepancias.

Una forma más rápida de probar

El juego es muy lento cuando se trata de programas que requieren varios miles de pasos para completar. Mi solución de prueba de concepto tomó 28042 pasos para rechazar 15. Incluso a una velocidad de 50x en el juego, eso simplemente lleva demasiado tiempo.

Encontré este sitio web muy útil . Simplemente copie y pegue el enlace a su respuesta, y puede probar su respuesta con entradas específicas. El proceso de 28042 pasos tomó menos de un segundo.

Una cosa a tener en cuenta es que a menudo dice algo como "incorrectamente aceptado" incluso si su máquina funciona correctamente. Esto se debe a que la página web solo conoce los casos de prueba. Por ejemplo, diría que mi solución "aceptó incorrectamente" el número 3, a pesar de que mi máquina era realmente correcta.

Cómo ganar

El criterio de puntuación es el número de partes (celdas ocupadas). Este es el código de golf, por lo que gana la presentación con la menor cantidad de partes.

Para aquellos interesados, mi solución de referencia tiene 96 partes y cabe en la cuadrícula de 13x13. Encontrar un algoritmo mejor podría conducir a mejoras colosales, ya que sé que usé un algoritmo subóptimo.

PhiNotPi
fuente

Respuestas:

10

53 piezas - rejilla 11x11

Acabo de aprender a jugar Manufactoria hace 2 días, por lo que probablemente no esté muy optimizado para el golf, pero al menos resuelve el problema. Implementa la división de prueba, por supuesto, a través de sustracciones repetidas. Todos los divisores de 2 a N-1 son verificados. La complejidad del tiempo debería ser O (N ^ 3), creo.

Solución de 53 piezas

Enlace de solución

Me decepcionó mucho tener que usar una cinta transportadora :)

Feersum
fuente