Ecrivez un programme (ou une fonction) qui prend une chaîne non vide de tous les caractères ASCII imprimables .
Imprime (ou retourne) une chaîne en zigzag des caractères de la chaîne avec chaque paire de caractères voisins liés par:
/
si le premier caractère apparaît avant le deuxième caractère dans l'ordre ASCII normal. par exempleB / A
\
si le premier caractère apparaît après le deuxième caractère dans l'ordre ASCII normal. par exempleB \ A
-
si les premier et deuxième caractères sont les mêmes. par exempleA-A
Donc, la sortie Programming Puzzles & Code Golf
serait
o
/ \
r z-z o e G l
/ \ / \ / \ / \ / \
P o r m-m n u l s & C d f
\ / \ / \ / \ / \ / \ / \ /
g a i g P e
\ /
S'il n'y a qu'un seul caractère dans la chaîne d'entrée, la sortie sera simplement ce caractère.
Votre programme doit traiter ,
/
, \
et -
la même chose que tous les autres personnages.
par exemple, -\//-- \ //-
devrait-il produire:
\
/ \
- /-/
/ \
- --- \ /-/
\ / \ / \
-
\
Il ne doit y avoir aucun retour à la ligne supplémentaire dans la sortie, à l'exception d'un seul retour à la ligne facultatif. (Notez que la ligne vide dans l'exemple ci-dessus contient le dernier espace de la chaîne et n'est donc pas étrangère.) Il peut y avoir des espaces de fin sur toutes les lignes de n'importe quel arrangement.
Le code le plus court en octets gagne.
Un autre exemple - Entrée:
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Sortie:
9 9 8 6 6
/ \ / \ / \ / \ / \
9 6 8 7 3 3 4 2 4 8 9 8-8
/ \ / \ / \ / \ / \ / \ / \
4 5 2 5 5 2 3-3 3 7 5 2 4 9 9 9-9 7
/ \ / \ / \ / \ / \ / \ / \ / \ / \
3 1 1 3 2 0 1 7 6 3 3 5 8 8 6
\ / \ / \ / \ / \ / \
. 1 1 5 2 9 9 3 7 1 4 6 8 9
\ / \ / \ / \ / \ / \ / \ / \ /
0 0 7 9 5 2 0 0 2 6 9-9 8 5 4 7
\ / \ / \ / \ / \ / \ / \ /
4 4-4 2 8 8 4 2 3 2 7 6
\ / \ / \ / \ /
0 6 8 3 1-1 0
\ / \ /
2 0
'\n'
par un modèle de chaîne comme celui-cifor
boucles peuvent être écrasées beaucoup. Ne perdez pas tout un bloc de code requis aveci++
. Au lieu de cela, exécutez la plupart de votrefor
code là-bas. En outre, vous n'avez pas besoin d'accolades autour d'une seule ligne de code.l
est de calculers.length*2-1
et vous le faites deux fois. Pourquoi ne pas stocker cette valeur à la place?<br>
est juste dedans alors il apparaît dans la version HTML; Si vous regardez bien, j'utilise plutôt une chaîne de modèle dans l'entrée réelle. Aussi, ce n'est pas une obligation: "Imprimer (ou retourner) ..."Python, 393 octets
Courir comme:
z("Zigzag")
la source
JavaScript (ES6), 202
Utilisation de chaînes de modèle. Les espaces d'indentation et les nouvelles lignes ne sont pas comptés, à l'exception de la dernière ligne arrière à l'intérieur des backtick qui est significative et comptée.
Note habituelle: testez l’exécution de l’extrait de code sur n’importe quel navigateur compatible EcmaScript 6 (notamment pas Chrome ni MSIE. J’ai testé sur Firefox, Safari 9 pourrait fonctionner)
la source
CJam, 79 octets
Essayez-le en ligne
Cela construit la sortie colonne par colonne et transpose le résultat à la fin pour obtenir la sortie ligne par ligne. C'était assez pénible dans l'ensemble.
Explication:
la source
Perl 5,
230214Tester
la source
K, 86
.
Ungolfed:
la source
Ruby, 158
Sauvegardé 6 octets grâce à histocrat . Merci!
la source
->s,*i{
. Et si vous remplacezs[0]
pars[/./]
, je pense que vous pouvez remplacers[1..-1]
par$'
.Python avec Numpy: 218 octets
Cela vaut la peine de gaspiller 19 octets pour importer numpy.
Golfé:
Ungolfed:
la source