J, 54 octets
[:|:|.@i.@#(>@],~' '#~[)"_1[:(,' '&,)/&.>>:@i.@#<@#"0]
Essayez-le en ligne! (notez que la sortie sur TIO a une nouvelle ligne et trois espaces, mais cela ne provient pas de l'appel de fonction - c'est probablement ce que l'interpréteur J fait automatiquement).
Je pense que l'idée générale de résoudre ce problème est juste, mais il y a de petites choses que je suis probablement en train de faire de manière sous-optimale qui ajoutent au décompte.
Variantes précédentes
55 octets
<:@+:@#{.[:|:|.@i.@#(],~' '#~[)"_1>:@i.@#(,' '&,)/@#"0]
56 octets
<:@+:@#{.[:|:|.@i.@#(],~' '#~[)"_1#{.[:(,' '&,)//.[:]\.]
Explication
Ce sera divisé en quelques fonctions. De plus, je n’étais pas aussi complet avec les dernières parties de l’explication, alors laissez-moi savoir si vous voulez une meilleure explication pour une certaine partie et je peux l’éditer dans.
dup =. >:@i.@# <@#"0 ]
space =. (,' '&,)/&.>
pad =. |.@i.@# (>@],~' '#~[)"_1 ]
trans =. |:
dup
duplique chaque caractère autant de fois que son index (plus un) dans la chaîne
space
insère des espaces entre chaque caractère
pad
remplit les personnages avec la bonne quantité d'espace
trans
transpose la matrice résultante
Exemple d'appel:
trans pad space dup 'abc'
c
b
a c
b
c
Dup
>:@i.@# <@#"0 ]
>:@i.@# Indices of each character plus one
# Length of the string
i. Range [0,length)
>: Add one
<@#"0 ] Duplicate each character as many times as it index (plus one)
"0 For each
# ] Copy the character
>:@i.@# as many times as it index
< Box the result
Les résultats sont encadrés pour empêcher J de remplir les extrémités avec des espaces (étant donné qu’elles sont de longueur inégale).
Exemple d'appel:
dup 'abc'
┌─┬──┬───┐
│a│bb│ccc│
└─┴──┴───┘
Espace
(,' '&,)/&.>
&.> For each boxed element
(,' '&,)/ Insert spaces between each
Exemple d'appel:
space dup 'abc'
┌─┬───┬─────┐
│a│b b│c c c│
└─┴───┴─────┘
Tampon
|.@i.@# (>@],~' '#~[)"_1 ]
(>@],~' '#~[) Pad the right arg with spaces given by the left arg
|.@i.@# Indices in reverse order
i. # Range [0,length)
|. Reverse
Fondamentalement, pad le premier élément avec la longueur - 1 espaces, le second avec la longueur - 2, etc. Il supprime également la boxe.
Exemple d'appel:
pad space dup 'abc'
a
b b
c c c
Transposer
C'est juste la fonction intégrée |:
qui prend la transposition d'une matrice.