J, 54 byte
[:|:|.@i.@#(>@],~' '#~[)"_1[:(,' '&,)/&.>>:@i.@#<@#"0]
Provalo online! (nota che l'output su TIO ha una nuova riga e tre spazi, ma ciò non deriva dalla chiamata di funzione - probabilmente è proprio quello che fa automaticamente l'interprete J).
Penso che l'idea generale di risolverlo sia giusta, ma ci sono piccole cose che probabilmente sto facendo in modo subottimale che si stanno aggiungendo al bytecount.
Varianti precedenti
55 byte
<:@+:@#{.[:|:|.@i.@#(],~' '#~[)"_1>:@i.@#(,' '&,)/@#"0]
56 byte
<:@+:@#{.[:|:|.@i.@#(],~' '#~[)"_1#{.[:(,' '&,)//.[:]\.]
Spiegazione
Questo sarà suddiviso in alcune funzioni. Inoltre, non ero così approfondito con le ultime parti della spiegazione, quindi fatemi sapere se volete una spiegazione migliore per una determinata parte e posso modificarla in.
dup =. >:@i.@# <@#"0 ]
space =. (,' '&,)/&.>
pad =. |.@i.@# (>@],~' '#~[)"_1 ]
trans =. |:
dup
duplica ogni carattere quante volte il suo indice (più uno) nella stringa
space
inserisce spazi tra ogni personaggio
pad
riempie i personaggi con la giusta quantità di spazi
trans
traspone la matrice risultante
Chiamata di esempio:
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
I risultati vengono inscatolati per impedire a J di riempire le estremità con spazi (poiché sono di lunghezza irregolare).
Chiamata di esempio:
dup 'abc'
┌─┬──┬───┐
│a│bb│ccc│
└─┴──┴───┘
Spazio
(,' '&,)/&.>
&.> For each boxed element
(,' '&,)/ Insert spaces between each
Chiamata di esempio:
space dup 'abc'
┌─┬───┬─────┐
│a│b b│c c c│
└─┴───┴─────┘
tampone
|.@i.@# (>@],~' '#~[)"_1 ]
(>@],~' '#~[) Pad the right arg with spaces given by the left arg
|.@i.@# Indices in reverse order
i. # Range [0,length)
|. Reverse
Fondamentalmente, riempi il primo elemento con lunghezza - 1 spazi, il secondo con lunghezza - 2, ecc. Rimuove anche il pugilato.
Chiamata di esempio:
pad space dup 'abc'
a
b b
c c c
Trasporre
Questa è solo la funzione integrata |:
che prende la trasposizione di una matrice.