Poster Sandbox ici .
Créez une fonction ou un programme qui "Springifie" une chaîne.
- L'entrée sera une chaîne dans Stdin, ou l'alternative la plus proche
- L'entrée ne contiendra que de l'ASCII imprimable et / ou des espaces
- La sortie sera vers Stdout, ou l'alternative la plus proche
- Les sauts de ligne et les espaces sont acceptables
Comment sprinter une chaîne
- Formatez la chaîne en autant de bobines de ressort ASCII que nécessaire
- Remplissez les bobines avec des espaces, jusqu'à la bobine la plus proche
- Lisez les personnages en suivant le printemps autour des bobines
Il s'agit d'une bobine à ressort ASCII:
#
# ####
# #
# ####
#
Où les #s sont les caractères de la chaîne
Voici un exemple:
abcdefghijklmnopqrstuvwxyz
devient
a
b cdef
g h
i jklm
n
o
p qrst
u v
w xyz.
.
Où les .s remplacent les espaces pour la visibilité.
Ensuite, la chaîne est relue, en suivant le ressort ASCII vers le bas, autour des boucles, en appuyant deux fois sur get u:
1| a <-3
V b cdef
g h
4| i jklm
V n 2->
...
...donnant:
abgjklmhfedcginopuxyz vtsrquw (avec un espace de fin)
Cas de test
(citations ajoutées pour mettre en évidence les espaces de fin - veuillez ignorer en termes d'E / S)
I: "abcdefghijklmnopqrstuvwxyz"
O: "abgjklmhfedcginopuxyz vtsrquw "
I: "!@#"
O: "!@ # "
I: ""
O: ""
I: "12345 67890"
O: "12690 7 54368 "
I: " "
O: " "
Notez que la longueur de sortie est toujours un multiple de 15, la longueur d'une bobine à ressort
Il s'agit de code-golf , donc la réponse la plus courte en octets l'emporte.

La boucle principale commence à s'exécuter de droite à gauche, en s'enroulant du côté droit du terrain de jeu. C'est là que nous lisons le premier caractère de stdin et terminons s'il s'agit d'un EOF.
La section suivante s'assure que tous les caractères EOF sont convertis en espaces à l'aide de la formule
Une copie du caractère est enregistrée dans la mémoire temporaire, puis une recherche de l'index en cours est effectuée sur la table à la ligne quatre (
) pour déterminer si le caractère doit être sorti ou non.
Si le caractère doit être sorti, nous prenons la branche de gauche. Un échange est effectué ici pour annuler l'échange qui va se produire ensuite, puis un zéro est poussé pour forcer la branche à droite.
Si le personnage n'a pas été sorti, nous l'échangons dans la pile sous le compteur d'index (c'est l'échange qui est annulé dans la branche gauche). Et dans les deux cas, nous enregistrons le caractère en mémoire à l'offset d'index actuel, incrémentons l'index et vérifions s'il est supérieur à 13.
Sinon, nous lisons le caractère suivant dans stdin et répétons la boucle interne.
Si c'est le cas, nous aurons terminé un ensemble de 14 caractères, 7 ayant été sortis (