Manufactoria: genera il programma di accettazione più lento possibile


18

Scrivi un programma Manufactoria che accetterà il nastro di input vuoto. Ma non farlo in fretta! Voglio dire, scrivi velocemente il programma, ma non lasciarlo funzionare velocemente. Più lento è il programma, meglio è, fino a quando termina alla fine. Il seguente programma di esempio richiede 3:51 (il "tempo totale" riportato dal simulatore).

inserisci qui la descrizione dell'immagine

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_Acceptre!; Generate_the_slowest_possible_accepting_machine;:; 7; 3; 0 ;

Il programma inizia con il nastro vuoto. Deve scarabocchiare un po ', ma alla fine raggiunge il quadrato di output. Se lo desideri, puoi lasciare dei dati sul nastro. Vince il programma più lento sulla scheda Manufactoria 7x7!

Il tuo tasto freccia destra è tuo amico, accelera il simulatore.

Punti bonus per l'arresto anomalo del simulatore!


Quindi non ci sono requisiti per accettare / rifiutare input diversi dal nastro vuoto?
Volatilità,

@Volatilità: corretta.
Keith Randall,

In modo fastidioso, il simulatore non riporterà il tempo di esecuzione a meno che il nastro non sia vuoto alla fine, poiché non corrisponde all'output previsto della sfida. (Fortunatamente è stato facile per me cancellare il nastro alla fine senza aver bisogno di troppo spazio extra.)
breadbox

Risposte:


22

~ 10 23 iterazioni ~ 10 15 iterazioni ~ 10 8 iterazioni

Installazione di Manufactoria

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 macchina è fondamentalmente un contachilometri che gira nella base tre, usando i simboli rosso, blu e giallo per indicare rispettivamente le cifre 0, 1 e 2. Il simbolo verde viene utilizzato per contrassegnare la fine del numero. All'inizio, il nastro viene inizializzato con 49 simboli rossi. Questo viene fatto dalle parti nelle prime tre file della macchina. Le quattro righe inferiori gestiscono l'attività di incrementare il numero in un ciclo. Ad ogni iterazione, le due celle del ramo sul lato sinistro elaborano come applicare l'incremento al numero corrente, quindi le celle del ramo sul lato destro copiano le cifre rimanenti e non interessate.

In precedenza ho provato a stimare il tempo di funzionamento della macchina, se fosse stato autorizzato a completarla, ma a questo livello ha più senso seguire solo il numero di iterazioni. In parole povere, ci vuole circa un minuto per completare una iterazione, ma anche se ci volesse un secondo, ciò ridurrebbe il tempo di esecuzione di un solo ordine di grandezza.


4
Ok, mi arrendo ..
Volatilità,

2
Non mollare! Non ho dubbi che questo sta ancora graffiando la superficie. Ad esempio, la compattazione della logica del contachilometri solo da una o due celle consentirebbe un aumento dell'ordine di grandezza del tempo di esecuzione.
breadbox


5
Se aiuta, ho spesso presentato risposte sul golf che erano molto indietro rispetto al leader, solo perché era un approccio diverso. Una delle cose che adoro di questo sito è che preserva la diversità delle risposte.
breadbox,

1
@SimplyBeautifulArt Uno potrebbe concepibilmente migliorare avendo coppie di simboli come cifre (nel qual caso potresti usare 15 su 16 anziché 3 su 4). Certo, potresti provare molte difficoltà con le dimensioni ridotte della scheda nel provare a implementarlo.
feersum

8

603: 25

Test online

Oggi stavo rileggendo le domande della Manufactoria e all'improvviso ho avuto un'idea che avrebbe rallentato drasticamente il processo: invece di avere solo 50 valori e cambiare colore 3 volte, il nuovo programma lo fa, ma poi, decrementa il numero di valori di 1, e passa di nuovo attraverso il cambio colore, fino a quando non c'è un nastro vuoto in quel momento il programma si ferma.

La coda non memorizzerà più di 50 valori contemporaneamente, quindi è inutile cercare di inserire troppi valori sul nastro: vengono semplicemente rimossi immediatamente. Come prima, i nastri trasportatori mirano a massimizzare il tempo impiegato per il funzionamento. In effetti, ci sono state minime modifiche per ottenere un enorme aumento del tempo di esecuzione.

Ancora da nessuna parte vicino alla risposta breadbox però.


Interessante quanto siano simili le nostre soluzioni. Entrambi abbiamo iniziato con un moltiplicatore 9x6 e abbiamo messo il ramo e il gruppo x6 nello stesso posto! Il tuo è più elegante però - hai usato ogni cella e finito con un nastro pulito.
Igby Largeman,

5

33:33

Ci ho lavorato per un po '(la volatilità ha alzato il livello piuttosto alto), ma una volta che ho toccato 33:33, ho pensato che fosse un momento preciso per fermarmi.

La strategia è piuttosto schietta: sostanzialmente riempi il nastro con un colore, poi un altro, poi un altro, e cerca sempre di attraversare quante più celle possibili tra ogni scrittura (o gruppo di scritture).

Sono sicuro che ci sono modi per scoprire che possiamo andare molto oltre con questo.

Castoro occupato

Collegamento di livello


+1 Vedrò cosa posso fare per batterlo;) (anche se probabilmente non andrò troppo lontano)
Volatilità
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.