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 g
et 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.
Réponses:
Gelée , 26 octets
TryItOnline!
Comment?
la source
Python 2,
104102 10298 octetsMerci pour l'aide au commentaire!
https://tio.run/#2VDVy
Original:
la source
input()
et prendre des entrées dans le format"<stuff>"
.lambda
pour donner une fonction anonyme plutôt qu'un programme - c'est souvent plus court .+13
to+14
et le+1
to le+(len(t)%14>0)
ferait, mais il doit y avoir un moyen plus court.JavaScript (ES6), 79 octets
Chaîne hexadécimale volée sans vergogne à @ETHproductions.
la source
Rétine , 71 octets
Essayez-le en ligne!
Permuter les cordes n'est pas exactement concis dans la rétine ...
la source
JavaScript (ES7),
144143141114104103 octetsMerci à ETHProductions pour une économie de 10B!
Exemple
Production
la source
+('0x'+whatever)
pour le convertir en un nombre:(_,c)=>b[(c/15|0)*14+ +('0x'+'0169abc7543268d'[c%15])]
'0x'+'...'[c%15]-0+(c/15|0)*14
pour vous sauver une paire de parenthèses :-)Perl 6 , 61 octets
Comment ça fonctionne
La structure de base est la suivante:
L'expression utilisée pour indexer dans chaque segment de 14 caractères est
"abgjklmhfedcgin".ords X- 97
, qui fonctionne comme suit:abgjklmhfedcgin
.97 98 103 106 107 108 109 104 102 101 100 99 103 105 110
.0 1 6 9 10 11 12 7 5 4 3 2 6 8 13
.Perl 6 , 64 octets
Essayez-le en ligne!
Comment ça fonctionne
La structure de base est la suivante:
Indices comme ci - dessus, mais étant donné que nous appelons de
.flat
toute façon, nous pouvons utiliser un imbriquée (mais 1 octet plus courte) expression pour eux0,1,6,9..12,7,5...2,6,8,13
.(Cela semble banal, mais repose en fait sur une particularité d'analyse de Rakudo Perl 6 qui est probablement un bogue . Pour l'écrire sans exploiter ce bogue, il faudrait ajouter des parens autour du
5...2
.)la source
Befunge-93, 97 octets
Essayez-le en ligne!
Il s'agit d'une ventilation du code source avec les différents composants mis en évidence.
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
c = c + 31*!(c+1)
. Bien que cela ne s'applique pas à la première itération, cela peut se produire lors des passes suivantes.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 (
abgjklm
) et 7 restant sur la pile (cdefhin
). Nous supprimons les deux derniers, sortons les 5 (hfedc
) restants , puis récupérons et sortons les cas spéciauxg
,i
etn
de la mémoire.Et cela nous ramène au début de la boucle principale, où nous répétons le processus pour les 14 caractères suivants.
la source
Mathematica,
7772 octetsMerci à JungHwan Min pour avoir économisé 5 octets!
Fonction sans nom prenant une liste de caractères en entrée et renvoyant une liste de caractères.
Partition[#,14,14,{1,1}," "]
divise l'entrée en sous-listes de longueur 14, en ajoutant des espaces si nécessaire.LetterNumber@"abgjklmhfedcgin"
évalue à{1,2,7,10,11,12,13,8,6,5,4,3,7,9,14}
, ce qui indique l'ordre de prendre chaque sous-liste de longueur 14 (en répétant le 7ème élément de manière appropriée). Prend ensuite[[;;,...]]
les éléments de toutes les sous-listes de longueur 14 dans cet ordre etJoin@@
joint les réponses.Soumission précédente:
la source
LetterNumber@"abgjklmhfedcgin"
est un moyen plus court de compresser la liste. Au;;
lieu d'All
enregistrer également un octet.Python 3 , 86 octets
Essayez-le en ligne!
En prime, la chaîne
Tq>]zQ|1/X;:L$o
est un programme CJam valide qui imprime les caractères uniques sur l'entrée standard, triés. Essayez-le en ligne! (+ explication)la source
PHP, 94 octets
divise l'argument de ligne de commande en morceaux de 14 octets et fait une boucle dans la chaîne de traduction en tant qu'index pour la sous-chaîne. Courez avec
php -nr '<code>' <string>
.J'étais heureux de découvrir que
??
accepte également la chaîne vide (pour un index "invalide") comme nulle.la source
Rubis, 83 octets
La première idée était d'utiliser des nombres hexadécimaux, mais ord-48 enregistre un autre octet (volé dans la réponse de throx).
la source