Test di primalità in Manufactoria


13

sfondo

Manufactoria è un gioco sulla programmazione. Il giocatore deve utilizzare una forma di linguaggio di programmazione bidimensionale per completare le attività. Se non ne hai mai sentito parlare, il modo più semplice per imparare è provare i primi livelli del gioco.

Sfida

La tua sfida è quella di creare un programma che testa la primalità di un numero.

L'input sarà una serie di N marcatori blu nella coda. Se N è primo, il tuo programma dovrebbe accettarlo (sposta il robot fino alla fine). Se N è composito, il tuo programma dovrebbe rifiutarlo (rilascialo sul pavimento da qualche parte).

Opzioni di invio

Poiché questa è una sfida più complessa rispetto alla tipica sfida di Manufactoria, ho deciso di consentire più modi per inviare le tue risposte.

Vaniglia

Ho creato un livello personalizzato 13x13 per creare e testare gli invii. Il livello di test personalizzato è il seguente.

13x13 livello personalizzato

Il gioco consente solo 8 casi di test a livello personalizzato, ma la tua creazione dovrebbe essere teoricamente in grado di gestire qualsiasi numero naturale N, limitato solo dalla memoria disponibile. A scopo informativo, i casi di test forniti a livello personalizzato sono i seguenti:

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

Griglia estesa

Alcuni utenti potrebbero volere più spazio di una griglia 13x13. Ecco un link a un livello personalizzato 15x15 in-game, creato modificando un numero nell'URL:

15x15 livello personalizzato

Purtroppo, i livelli personalizzati più grandi non funzionano, poiché le celle aggiuntive sono inaccessibili.

La Manufactoria Esolang

C'è stato un adattamento di Manufactoria in un linguaggio basato su ASCII. Se vuoi un modo diverso di progettare / testare la tua creazione, o se non sei in grado di adattare la tua soluzione finale sul tabellone di gioco, puoi usare questo esolang. Puoi trovare informazioni su questo esolang qui:

Manufactoria esolang

Ci sono alcune discrepanze tra l'esolang e il gioco reale. Ad esempio, gli attraversamenti dei nastri trasportatori vengono gestiti in modo diverso. Cerca di evitare di approfittare di queste discrepanze.

Un modo più veloce per testare

Il gioco è molto lento quando si tratta di programmi che richiedono diverse migliaia di passaggi per essere completati. La mia soluzione di proof of concept ha richiesto 28042 passaggi per rifiutare 15. Anche con la velocità 50x in-game, ci vuole semplicemente troppo tempo.

Ho trovato questo sito molto utile . Copia e incolla semplicemente il link alla tua risposta e puoi testare la tua risposta con input specifici. Il processo di 28042 passaggi ha richiesto meno di un secondo.

Una cosa da notare è che spesso dice qualcosa come "erroneamente accettato" anche se la tua macchina ha funzionato correttamente. Questo perché la pagina web conosce solo i casi di test. Ad esempio, direbbe che la mia soluzione ha "erroneamente accettato" il numero 3, anche se la mia macchina era effettivamente corretta.

Come vincere

Il criterio di punteggio è il numero di parti (celle occupate). Questo è il codice golf, quindi vince l'invio con il minor numero di parti.

Per chi è interessato, la mia soluzione di riferimento ha 96 parti e si adatta alla griglia 13x13. Trovare un algoritmo migliore potrebbe portare a colossali miglioramenti, poiché so di aver usato un algoritmo non ottimale.

Risposte:


10

53 parti - griglia 11x11

Ho appena imparato a giocare a Manufactoria 2 giorni fa, quindi probabilmente non è molto ottimizzato per il golf, ma almeno risolve il problema. Implementa naturalmente la divisione di prova, attraverso ripetute sottrazioni. Tutti i divisori da 2 a N-1 vengono controllati. La complessità temporale dovrebbe essere O (N ^ 3), credo.

Soluzione da 53 pezzi

Link soluzione

Sono stato molto deluso di dover usare un nastro trasportatore :)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.