introduction
Alice est un langage 2D de Martin Ender qui a deux modes d'exécution différents, cardinal et ordinal . Lorsque le pointeur d'instruction passe à travers un miroir (soit /
ou \
), il passe d'un mode à l'autre.
Dans ce défi, nous nous concentrerons sur le mode ordinal , où les commandes opèrent sur les chaînes et le pointeur d'instructions se déplace en diagonale, rebondissant contre les bords du code.
Des programmes simples fonctionnant uniquement en mode ordinal peuvent être écrits dans un style assez compact, comme dans l'exemple suivant:
/fbd/
@aec\
Ici , le IP démarre en mode cardinal de la première cellule vers l' est, passe par le premier miroir et commence à se déplacer en diagonale et rebondir, l' exécution des commandes a
, b
et c
. Il rencontre alors le miroir nord-est qui fait aller au sud vers l'autre miroir, puis commencer à rebondir vers l'ouest, rencontrant des commandes d
, e
, f
et enfin @
, ce qui met fin au programme.
Ce type de structure est assez compact, mais ce n'est pas facile à écrire et à maintenir (l'ajout d'une seule commande peut nous forcer à réorganiser la plupart du code!), Donc j'aimerais que vous m'aidiez à formater.
La tâche
Étant donné une séquence de commandes, où chaque commande est un seul caractère ASCII imprimable, réorganisez-les sur deux lignes afin que la première moitié de la séquence puisse être lue à partir du premier caractère de la deuxième ligne, puis en se déplaçant toujours en diagonale vers la droite, tandis que la seconde moitié peut être lue en prenant les caractères restants de droite à gauche. Ne vous inquiétez pas des miroirs et du symbole de terminaison, je les ajouterai moi-même.
Ainsi, par exemple, étant donné l'entrée, abcdef
vous devez sortir
fbd
aec
Dans le cas où l'entrée est de longueur impaire, vous devez ajouter un seul espace (qui est un noop dans Alice) n'importe où, tant que la séquence de commandes rencontrée reste la même. Vous pouvez également choisir de sortir deux lignes de longueur différente d'un caractère, auquel cas la plus courte est considérée comme ayant un seul espace à la fin.
Règles
C'est le code-golf , la réponse la plus courte, en octets, gagne!
- Vous pouvez entrer / sortir via l'une des méthodes d' entrée / sortie par défaut
- L'entrée se compose d'une seule ligne de caractères ASCII imprimables
- Une seule nouvelle ligne de fin est autorisée dans la sortie
- Certaines sorties de votre programme peuvent ne pas avoir un comportement complètement correct lorsqu'elles sont exécutées en tant que programmes Alice (par exemple si l'espace de remplissage est inséré à l'intérieur d'un littéral de chaîne). Vous n'avez pas à vous préoccuper de ces situations
- Les failles standard sont interdites
Cas de test
--Input
abcdef
--Output
fbd
aec
--Input
123
--Output
2
13
OR
31
2
OR
3
12
OR
32
1
--Input
O
--Output
O
OR
O
--Input
"Hello, World!"o
--Output
oH!lloo
""edlr,W
--Input
i.szR.szno
--Output
o.zz.
inssR
--Input
" ^^} .~[}.~~[}{~~{}[^^^^.""!}"r.h~;a*y'~i.*So
--Output
o *^i}'.*[;.h~r}}~"{.[^
"S .^~ y~a}~~.["{!~"}^^^
(Odd length, your solution may be different)
Gelée ,
2322 octets-1 octet grâce à Leo (en bas à gauche peut être le rembourrage)
Un programme complet imprimant le résultat (le lien monadique renvoie une liste de listes de listes de caractères).
Essayez-le en ligne! ou consultez une suite de tests .
Comment?
la source
JavaScript (ES6), 104 octets
Fonctionne en émulant le chemin d'exécution et en remplissant les commandes au fur et à mesure.
la source
1&~i
réalise le zig-zag vertical, tandis que lei+i>l?l-i:i
réalise le miroir à mi-chemin. Une fois que toutes les commandes ont été entrées dans les positions d'exécution souhaitées, la matrice est ensuite collectée ensemble pour produire le résultat souhaité.