Étant donné une grille rectangulaire de texte, alignez les diagonales qui vont du coin supérieur gauche au coin inférieur droit dans des colonnes de sorte que les caractères les plus à droite de toutes les diagonales soient au même niveau. Utilisez des espaces pour l'indentation.
Par exemple, si la grille de saisie de texte est
abcd
1234
WXYZ
alors vous aligner les diagonales W
, 1X
, a2Y
, b3z
, c4
et d
dans les colonnes donnant cette sortie:
ab
123c
WXYZ4d
Notez que les caractères les plus à droite de toutes les diagonales,, WXYZ4d
sont au même niveau.
Détails
La grille de saisie du texte aura une taille minimale de 1 × 1 et toutes les lignes auront la même longueur.
Vous pouvez prendre la grille d'entrée comme une chaîne multiligne ou comme une liste de chaînes de ligne unique.
La grille d'entrée ne contiendra que des caractères ASCII imprimables (espace compris).
La sortie peut éventuellement avoir une nouvelle ligne de fin, mais il ne doit pas y avoir d'autres lignes vides.
Les lignes de la sortie peuvent éventuellement avoir des espaces de fin mais ne doivent pas avoir d'espaces de début inutiles.
Autres exemples
Les lignes vides séparent les exemples. Chaque entrée est directement suivie de sa sortie.
123
456
789
1
452
78963
123.?!
456??!
789!!!
123.
456???
789!!!!!
**@
@
**
@ @
/\/\
\/ /
/ /\
\/\/
/
\/\
/ / /
\/\/\/\
12
34
56
78
90
7531
908642
Code
Code
G
O
L
F
FLOG
~
~
Notation
Le code le plus court en octets gagne.
Réponses:
J , 12 octets
Définit un verbe anonyme. Essayez-le en ligne!
Explication
En J,
u &. v
(lire:u
sousv
) signifie "v, puis u, puis inverse de v". L'inversion et la transposition sont auto-inverses, donc le programme signifie vraiment "inverser, transposer, extraire les anti-diagonales inversées, transposer, inverser".Avec un exemple d'entrée:
Sens inverse:
Transposer:
Extraire les anti-diagonales inversées (et pad avec des espaces):
Transposer:
Sens inverse:
la source
Gelée , 11 ou 10 octets
Essayez-le en ligne!
Un algorithme assez différent de mon autre solution; celui-ci utilise une fonction intégrée pour accéder aux diagonales, plutôt que de faire les choses manuellement.
Explication:
Les diagonales sortent peut-être dans la pire orientation possible (nécessitant des transpositions, des inversions et des rotations répétées) et dans le mauvais ordre (Jelly sort d'abord la diagonale principale, nous devons donc déplacer certaines diagonales de la fin au début pour les obtenir). en ordre). Cependant, cela sort toujours plus court que mon autre solution Jelly.
la source
CJam , 29 octets
Essayez-le en ligne!
Explication
Au lieu d'extraire les diagonales, nous décollons les couches de l'extrémité en alternant gauche et droite. Tenez compte de l'entrée suivante:
Si nous écrivons les diagonales requises par le défi, nous obtenons:
Notez qu'il s'agit simplement (de bas en haut), de la ligne la plus basse, concaténée avec la colonne la plus à droite. Cette définition fonctionne également si l'entrée est rectangulaire.
la source
]
enveloppera toute la pile! Je pense que les fonctions devraient fonctionner quel que soit le contenu de la pile sous l'entrée, et vous semblez d'accord ^^]
quand je l'ai changé en fonction.[{)\z}h]
et garder une fonction, pour 27 octets.JavaScript,
116101 octetsJe voulais juste utiliser cette
/.$|\n?(?!.*\n)..+/gm
idée de motif regex . ( https://regex101.com/r/mjMz9i/2 )La saveur regex JavaScript est décevante, j'ai dû l'utiliser
(?!.*\n)
car elle n'a pas été\Z
implémentée, et je n'ai pas pu l'utiliser\0
.la source
.
place de[^]
car il vous suffit de sauter les caractères non-retour à la ligne pour trouver un retour à la ligne, ce qui économise 2 octets.^
soit nécessaire dans la regex finale, car tout\n
est déjà au début de la chaîne de toute façon, ce qui économise un autre octet.'$&'+' '.repeat(n)
. Fondamentalement, cette expression est juste$&
mais avec un espace ajouté à chaque appel, ce qui est trivial à implémenter de manière récursive - remplacezn=0
parr='$&'
etf(z,n+1)
avecf(z,r+' ')
et puisr
est la chaîne de remplacement souhaitée. Si j'ai compté correctement, cela économise 12 octets.Gelée , 15 ou 14 octets
Essayez-le en ligne!
Il s'agit d'un algorithme qui n'utilise pas la fonction intégrée de Jelly pour les diagonales. Faire cela pourrait le raccourcir; Je pourrais bien essayer ça ensuite.
Voici comment fonctionne l'algorithme. Commençons par cette entrée:
Nous commençons avec
L’⁶x;\
.L’
nous donne la longueur de l'entrée moins 1 (dans ce cas, 2). Puis⁶x
nous donne une chaîne d'espaces de cette longueur (" "
dans ce cas); et;\
nous donne les résultats cumulatifs lors de la concaténation (un triangle d'espaces). Nous inversons ensuite le triangle et le concaténons sur le côté gauche de l'original (;"
concatène les éléments correspondants des listes,µ
provoque de force une interruption de l'analyse et utilise donc l'entrée d'origine comme deuxième liste par défaut), ce qui nous donne ceci:C'est presque la solution que nous voulons, mais nous devons déplacer les éléments vers le bas pour affleurer la dernière chaîne. Il s'agit de transposer (
Z
), d'inverser l'intérieur de chaque ligne (U
), de transposer à nouveau (Z
) et d'inverser les lignes (Ṛ
):transposer
inverser dans les rangées
transposer
inverser les rangées
Enfin,
Y
rejoint sur les nouvelles lignes. Il n'est pas clair pour moi si cela est nécessaire pour se conformer à la spécification (qui autorise l'entrée sous forme de liste de chaînes, mais ne dit pas la même chose à propos de la sortie), donc le nombre d'octets exact dépend de s'il est inclus ou omis.la source
Pyth, 16 octets
Big Pyth :
Comme les gens disent que les langues de golf sont difficiles à lire, j'ai conçu Big Pyth, qui est à la fois facilement lisible et facilement traduisible en Pyth. Le fichier lié traduit un flux d'entrée de Big Pyth en Pyth. Chaque jeton Big Pyth séparé par des espaces correspond à un jeton Pyth, soit un caractère, soit un
.
suivi d'un caractère. Les exceptions sont lesimplicit
jetons, qui sont implicites dans le code Pyth.Je veux voir à quel point un format explicatif Big Pyth est bon, donc je ne vais pas donner d'autre explication. Demandez-moi cependant si vous voulez quelque chose.
la source
JavaScript (ES6), 140 octets
Prend l'entrée et la sortie sous forme de tableaux de chaînes. Accepte également une entrée de tableau de caractères à deux dimensions et économise 7 octets si une sortie de tableau de caractères à deux dimensions est acceptable. Explication: La hauteur du résultat
m
est le minimum de la hauteurh
et de la largeurw
du tableau d'origine, tandis que la largeur est simplement inférieure de un à la somme de la hauteur et de la largeur du tableau d'origine. La ligne source pour les caractères de la partie principale du résultat provient directement de la ligne appropriée du tableau d'origine, en comptant à partir du bas, tandis que sur la partie supplémentaire du résultat, la ligne source monte d'une ligne pour chaque colonne supplémentaire. La colonne source pour les deux moitiés du résultat s'avère être égale à la colonne de destination déplacée d'une colonne vers la gauche pour chaque ligne source au-dessus du bas.la source
Octave, 57 octets
la source
Python 3, 247 octets
la source
join(i) for
.Python 2, 150 octets
Prend l'entrée comme liste de chaînes.
la source
Clojure, 194 octets
Implémenté à la dure en regroupant les personnages
G
puis en générant des lignes.Prend entrée en tant que
vec
devec
s comme[[\a \b \c \d] [\1 \2 \3 \4] [\W \X \Y \Z]]
. Exemple:la source