Potresti aver visto Jacob's Ladder nei musei della scienza per bambini. Se non hai familiarità con quello che sembrano, ci sono diverse immagini ed esempi di video su Wikimedia Commons . La sfida oggi è quella di creare una versione animata ASCII del gadget elettrico. Alla fine, dovrebbe assomigliare a questo:
Costruzione di scale
Ecco la forma base di una scala con un'altezza ( H ) di 6:
6 \ /
5 \ /
4 \ /
3 \ /
2 \ /
1 \ /
0 ¯¯
I numeri a sinistra indicano semplicemente il numero di riga per questo esempio e non devono essere inclusi nell'output. Faremo riferimento a una determinata riga per numero ( R ). La riga 0 è il fondo ¯¯
. Ogni riga da 1 a H è composta da quattro parti:
- Uno spazio
(U + 0020) ripetuto ( H - R ) volte
- Una barra
\
rovesciata (U + 005C) - Uno spazio
(U + 0020) ripetuto (2 * R ) volte
- Una barra
/
(U + 002F)
La riga 0 è identica, tranne per il fatto che entrambe le barre vengono sostituite con un macron ¯
(U + 00AF). Lo spazio bianco finale alla fine di ogni riga o sotto la scala è OK. Lo spazio bianco principale non lo è.
Costruzione ad arco
Una volta costruita la scala, è possibile creare archi tra il lato sinistro e destro. Un arco è interamente all'interno di una riga e sostituisce gli spazi tra il primo \
e il finale /
. Pertanto, la riga 2 avrà 4 caratteri nel suo arco, la riga 3 ne avrà 6 e così via. Ogni arco è composto usando le seguenti regole:
- Gli unici caratteri consentiti sono
_/¯\
(U + 005F, U + 002F, U + 00AF, U + 005C) - Al fine di garantire un aspetto uniforme, qualsiasi
¯
o/
deve essere seguito da un¯
o\
- Al fine di garantire un aspetto uniforme, qualsiasi
_
o\
deve essere seguito da un_
o/
- Le due regole sopra si applicano anche ai bordi della scala
- Le tre regole sopra indicano che il primo carattere nell'arco deve essere
_
o/
e l'ultimo carattere deve essere_
o\
(\¯\_//
non è valido su entrambe le estremità ma\_/¯\/
è OK) - Ci deve essere una possibilità diversa da zero per ogni personaggio ammissibile che si verifichi in un dato punto
- Ogni arco è indipendente da ogni altro arco
Animazione
La vita di un singolo arco viene creata avviandolo alla riga 1 e "spostandolo" di una riga alla volta fino a raggiungere la cima. IE, prima genera un arco nella riga 1, quindi ripristina gli spazi e genera un arco nella riga 2 e così via. Dato un numero di archi da mostrare ( N ), mostra la vita completa di tanti archi uno alla volta usando le seguenti linee guida:
- Solo un arco dovrebbe essere "vivo" alla volta. L'arco successivo non può iniziare fino a quando quello attuale raggiunge la cima e quindi si spegne.
- Ogni riga della vita dell'arco dovrebbe essere mostrata esattamente per un fotogramma
- Dovrebbe esserci un fotogramma solo della scala base (senza archi) prima che inizi un nuovo arco (opzionale prima del primo arco)
- L'animazione dovrebbe mostrare la vita completa di N archi. Se N = 0, dovrebbe animare per sempre archi casuali fino all'arresto.
- Se N > 0, puoi comunque ripetere l'animazione per sempre ma deve essere sempre un loop con gli stessi archi. (La GIF di esempio nella parte superiore di questo post ha H = 6 e N = 3 ma è in loop per sempre.)
- L'animazione dovrebbe avvenire sul posto. Cioè, ogni frame dovrebbe sovrascrivere completamente il frame successivo ed essere nella stessa posizione.
- La lunghezza di ogni fotogramma può essere qualsiasi cosa tu voglia ma rendila guardabile da un essere umano (IE, usa il tuo buon senso: 0,01 s / frame e 30 s / frame sono entrambi inaccettabili).
Input Output
- Input e Output possono essere in qualsiasi formato standard
- Puoi esportare una GIF, scrivere del testo sullo schermo, produrre un singolo file per ogni fotogramma o qualsiasi altro mezzo ragionevole
- Sono vietate le scappatoie standard
- L'altezza della scala H sarà un numero intero positivo
- Il numero di archi per mostrare N sarà un numero intero non negativo
- Sia H che N sono presi come input in qualsiasi ordine tu scelga (includi l'ordine nella tua risposta)
Condizioni vincenti
Questo è code-golf, quindi vince il codice più corto.
the first character in the arc must be _ or / and the last character must be _ or \
e There must be a non-zero chance for each allowable character to occur at a given point
. Per essere simmetrici, sia il primo che l'ultimo personaggio dovrebbero essere _
ogni volta, il che significa che non vi è alcuna possibilità che si /
verifichi uno o l'altro.