Post sandbox qui .
Creare una funzione o un programma che "Springify" una stringa.
- L'input sarà una stringa in Stdin o l'alternativa più vicina
- L'input conterrà solo ASCII e / o spazi stampabili
- L'output sarà su Stdout o l'alternativa più vicina
- Newline e spazi finali sono accettabili
Come far scattare una stringa
- Formatta la stringa in tutte le bobine a molla ASCII necessarie
- Riempi le bobine con spazi, fino alla bobina più vicina
- Leggi i personaggi, seguendo la molla attorno alle bobine
Questa è una molla elicoidale ASCII:
#
# ####
# #
# ####
#
Dove #sono i caratteri della stringa
Ecco un esempio:
abcdefghijklmnopqrstuvwxyz
diventa
a
b cdef
g h
i jklm
n
o
p qrst
u v
w xyz.
.
Dove la .s sostituisce gli spazi per la visibilità.
Quindi, la stringa viene letta di nuovo, seguendo la molla ASCII verso il basso, attorno agli anelli, colpendo il ge udue volte:
1| a <-3
V b cdef
g h
4| i jklm
V n 2->
...
...dando:
abgjklmhfedcginopuxyz vtsrquw (con uno spazio finale)
Casi test
(citazioni aggiunte per evidenziare gli spazi finali - si prega di ignorare in termini di IO)
I: "abcdefghijklmnopqrstuvwxyz"
O: "abgjklmhfedcginopuxyz vtsrquw "
I: "!@#"
O: "!@ # "
I: ""
O: ""
I: "12345 67890"
O: "12690 7 54368 "
I: " "
O: " "
Si noti che la lunghezza di uscita è sempre un multiplo di 15, la lunghezza di una molla elicoidale
Questo è code-golf , quindi vince la risposta più breve in byte.

Il loop principale inizia eseguendo da destra a sinistra, avvolgendosi sul lato destro del campo di gioco. Qui è dove leggiamo il primo personaggio di stdin e terminiamo se si tratta di un EOF.
La sezione successiva si assicura che tutti i caratteri EOF vengano convertiti in spazi usando la formula
Una copia del personaggio viene salvata nella memoria temporanea, quindi una ricerca dell'indice corrente viene eseguita sulla tabella alla riga quattro (
) per determinare se il carattere deve essere emesso o meno.
Se il personaggio deve essere emesso, prendiamo il ramo sinistro. Uno swap viene eseguito qui per annullare lo swap che si verificherà successivamente, quindi viene premuto uno zero per forzare il ramo a destra.
Se il personaggio non è stato emesso, lo scambiamo nello stack sotto il contatore dell'indice (questo è lo swap che viene annullato nel ramo sinistro). E in entrambi i casi salviamo il carattere in memoria con l'offset dell'indice corrente, incrementiamo l'indice e controlliamo se è maggiore di 13. In
caso contrario, leggiamo il carattere successivo da stdin e ripetiamo il ciclo interno.
In tal caso, avremo terminato un set di 14 caratteri, 7 dei quali sono stati emessi (