Hexagony, 37 35 34 31
10"+}(=${";<$<1}42/.0@_=<>\;>(_
Allargato:
1 0 " +
} ( = $ {
" ; < $ < 1
} 4 2 / . 0 @
_ = < > \ ;
> ( _ . .
. . . .
Provalo online
Fondamentalmente ne ha solo due per il conto alla rovescia da dieci a zero, stampando un asterisco sul loop interno e una nuova riga sul loop esterno.
Spiegazione:
Questo programma è composto da tre parti principali: inizializzazione della memoria, un loop che stampa dieci asterischi e un loop che stampa una nuova riga. Il ciclo che stampa una nuova riga contiene anche il ciclo che stampa gli asterischi.
Innanzitutto, il codice esegue l'inizializzazione della memoria totalmente lineare. Il codice funziona a essere: 10"+}42
. Questo imposta la memoria dei bordi vicini in modo che assomigli a:
10 \ / 10
|
42
42 è il codice ASCII per il carattere asterisco e le due decine verranno utilizzate come contatori di loop. Da notare che il puntatore della memoria sta puntando in modo diverso dalle due decine, quindi spostarsi all'indietro ci metterà su una delle dieci.
Quindi, iniziamo il ciclo di stampa dell'asterisco. Linearmente, il codice è simile: ;".._(
. Questo stampa un asterisco, sposta il puntatore della memoria all'indietro ea sinistra e infine diminuisce il valore lì. Dopo un'iterazione, la memoria sarebbe simile a:
10 \ / 9
|
42
Quindi raggiungiamo la condizione del loop: quella in basso a sinistra >
. Se il bordo che abbiamo appena decrementato è ancora positivo, rimbalziamo ed eseguiamo un {
per riportarci indietro sul 42. Quindi colpiamo a $
e torniamo all'inizio del ciclo di stampa, il ;
, saltando il <
. Se il valore era zero, ci dirigiamo nell'altro loop.
Il ciclo esterno inizia reimpostando il bordo di memoria recentemente azzerato su dieci (questo è il 10
nel codice, andando a sud-ovest). Quindi, stampiamo questi dieci come un carattere ASCII, che è una nuova riga. Successivamente, passiamo all'altro bordo memoria e farlo diminuire con {(
e quindi eseguire ciò che equivale a un gruppo di noops: =${_=
. Ora, dopo un'iterazione di questo ciclo, la memoria sarebbe simile a:
9 \ / 10
|
42
Questa volta, la memoria è rivolta verso l'esterno dal bordo memorizzando un nove nel diagramma sopra. Successivamente eseguiamo ciò <
che funge da condizione di loop per il loop esterno. Se il valore era diverso da zero rimbalziamo su alcuni mirror, quindi ricominciamo a eseguire istruzioni significative dopo aver inserito la parte superiore dell'esagono nel "
sud-ovest in movimento. Questo ci fa muovere indietro e verso sinistra, di nuovo sulla 42, ma rivolti verso l'interno. Quindi =
ribalta la nostra direzione, ripristinando correttamente lo stato per ricominciare il ciclo interno. Se il bordo era impostato su zero, il puntatore dell'istruzione procede in una piccola avventura che non fa nulla fino a quando non esce dal programma.
L'avventura inizia con il puntatore delle istruzioni che si avventura a nord-est, trascurando pericolosamente la sicurezza delle direzioni cardinali. Ignora coraggiosamente uno specchio che è allineato con la sua direzione ( /
) e salta eroicamente da un trampolino ($
) eludere completamente la trappola mortale di un altro trampolino identico. Fissando il vuoto dei bordi esagonali non inizializzati, il puntatore, senza esitare per un momento, aggiunge i due bordi vuoti che affronta insieme, impostando il bordo corrente alla loro somma: 0 (il bordo era effettivamente zero prima, ma al puntatore piace credo che questo fosse piuttosto importante). Dato che il bordo è zero, il puntatore fa una svolta a sinistra al bivio, camminando in una foresta misteriosa (di esagoni). Lì, si trova disorientato, muovendosi avanti e indietro e avanti, fino a quando non finisce nello stesso punto della memoria in cui è iniziato. Pensando che il problema deve essere che il bordo corrente è stato impostato su zero l'ultima volta, il puntatore coraggiosamente pianta a1
nel bordo corrente. Quindi, il nobile puntatore indaga su un altro percorso, uno tracciato con ... una trappola! Il fronte corrente viene decrementato e riportato a zero! Il puntatore, sbalordito dalla svolta sconvolgente degli eventi, inciampa di nuovo nella trappola impostando il bordo corrente su uno negativo. Infuriato, il puntatore tenta di tornare nella foresta relativamente piacevole, solo per notare che poiché il bordo attuale non è positivo, i percorsi si sono nuovamente spostati e il puntatore si ritrova a camminare in una grotta. E per grotta intendo la bocca di un gigantesco verme esagonale. Indifeso, l'indicatore maledice la sessualità con il suo respiro morente. Inoltre, il programma termina.