Dada uma grade retangular de texto, alinhe as diagonais que vão da parte superior esquerda para a parte inferior direita em colunas, de modo que os caracteres mais baixos à direita de todas as diagonais estejam no mesmo nível. Use espaços para recuo.
Por exemplo, se a grade de entrada de texto for
abcd
1234
WXYZ
então você alinhar as diagonais W
, 1X
, a2Y
, b3z
, c4
, e d
em colunas dando essa saída:
ab
123c
WXYZ4d
Observe que os caracteres mais baixos à direita de todas as diagonais WXYZ4d
, estão no mesmo nível.
Detalhes
A grade de entrada do texto terá tamanho mínimo de 1 × 1 e todas as linhas terão o mesmo comprimento.
Você pode considerar a grade de entrada como uma cadeia de linhas múltiplas ou como uma lista de cadeias de linhas únicas.
A grade de entrada contém apenas caracteres ASCII imprimíveis (inclui espaço).
Opcionalmente, a saída pode ter uma nova linha à direita, mas não deve haver outras linhas vazias.
As linhas da saída podem opcionalmente ter espaços à direita, mas não devem ter espaços à esquerda desnecessários.
Outros exemplos
Linhas vazias separam exemplos. Cada entrada é diretamente seguida por sua saída.
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
~
~
Pontuação
O código mais curto em bytes vence.
Respostas:
J , 12 bytes
Define um verbo anônimo. Experimente online!
Explicação
Em J,
u &. v
(leia-se:u
abaixov
) significa "v, então u, então inverso de v". Reversão e transposição são auto-inversas, então o programa realmente significa "reverter, transpor, extrair anti-diagonais reversas, transpor, reverter".Com entrada de exemplo:
Marcha ré:
Transpor:
Extrair anti-diagonais invertidas (e almofada com espaços):
Transpor:
Marcha ré:
fonte
Gelatina , 11 ou 10 bytes
Experimente online!
Um algoritmo bastante diferente da minha outra solução; este usa um builtin para acessar as diagonais, em vez de fazer as coisas manualmente.
Explicação:
As diagonais aparecem possivelmente na pior orientação possível (exigindo transposições, reversões e rotações repetidas) e na ordem errada (Jelly exibe a diagonal principal primeiro, portanto, temos que mover algumas diagonais do final para o início para obtê-las. em ordem). No entanto, isso ainda sai mais curto do que minha outra solução Jelly.
fonte
CJam , 29 bytes
Experimente online!
Explicação
Em vez de extrair as diagonais, descascamos as camadas do final, alternando esquerda e direita. Considere a seguinte entrada:
Se escrevermos as diagonais conforme exigido pelo desafio, obteremos:
Observe que esta é simplesmente (de baixo para cima), a linha mais abaixo, concatenada com a coluna mais à direita. Essa definição também funciona se a entrada for retangular.
fonte
]
envolverá toda a pilha! Eu acho que as funções devem funcionar, independentemente do conteúdo da pilha abaixo da entrada, e você parece concordar ^^]
quando mudei para uma função.[{)\z}h]
e manter uma função, por 27 bytes.JavaScript,
116101 bytesEu só queria usar essa
/.$|\n?(?!.*\n)..+/gm
ideia de padrão regex . ( https://regex101.com/r/mjMz9i/2 )O sabor da expressão regular do JavaScript é decepcionante, tive que usar
(?!.*\n)
porque não foi\Z
implementado e, de alguma forma, não consegui usá-lo\0
.fonte
.
vez de[^]
apenas precisar pular caracteres que não sejam de nova linha para encontrar uma nova linha, que economiza 2 bytes.^
seja necessário no regex final, porque\n
já existe algum no início da string, portanto, isso salva outro byte.'$&'+' '.repeat(n)
. Basicamente, essa expressão é justa,$&
mas com um espaço adicionado a cada chamada, o que é trivial para implementar recursivamente - substituan=0
porr='$&'
ef(z,n+1)
comf(z,r+' ')
e, em seguida,r
é a sequência de substituição desejada. Se contei corretamente, isso salva 12 bytes.Gelatina , 15 ou 14 bytes
Experimente online!
Este é um algoritmo que não usa o Jelly embutido para diagonais. Fazer isso pode torná-lo mais curto; Eu poderia muito bem tentar isso a seguir.
Aqui está como o algoritmo funciona. Vamos começar com esta entrada:
Começamos com
L’⁶x;\
.L’
nos fornece o comprimento da entrada menos 1 (neste caso, 2). Então⁶x
nos fornece uma série de espaços desse comprimento (" "
neste caso); e;\
nos fornece os resultados cumulativos ao concatená-lo (um triângulo de espaços). Em seguida, invertemos o triângulo e o concatenamos no lado esquerdo do original (;"
concatena os elementos correspondentes das listas,µ
provoca forçosamente uma quebra na análise e, portanto, usa a entrada original como a segunda lista por padrão), fornecendo-nos o seguinte:Essa é quase a solução que queremos, mas precisamos mover os elementos para baixo para alinhar com a última string. É uma questão de transpor (
Z
), reverter dentro de cada linha (U
), transpor novamente (Z
) e reverter as linhas (Ṛ
):transpor
reverter dentro de linhas
transpor
inverta as linhas
Por fim,
Y
ingressa em novas linhas. Não está claro para mim se isso é necessário ou não para atender à especificação (que permite entrada como uma lista de seqüências de caracteres, mas não diz o mesmo sobre a saída), portanto, a contagem exata de bytes depende de sua inclusão ou omissão.fonte
Pitão, 16 bytes
Pitão grande :
Como as pessoas dizem que os idiomas de golfe são difíceis de ler, eu projetei o Big Pyth, que é facilmente legível e traduzível para o Pyth. O arquivo vinculado converte um fluxo de entrada do Big Pyth em Pyth. Cada token Big Pyth separado por espaço em branco corresponde a um token Pyth, um caractere ou um
.
seguido por um caractere. As exceções são osimplicit
tokens, que estão implícitos no código Pyth.Quero ver quão bom é o formato explicativo Big Pyth, então não darei nenhuma outra explicação. Pergunte-me se você quer algo explicado, no entanto.
fonte
JavaScript (ES6), 140 bytes
Recebe entrada e saída como matrizes de strings. Também aceita uma entrada de matriz de caracteres bidimensional e salve 7 bytes se uma saída de matriz de caracteres bidimensional for aceitável. Explicação: A altura do resultado
m
é o mínimo da alturah
e larguraw
da matriz original, enquanto a largura é simplesmente um a menos que a soma da altura e largura da matriz original. A linha de origem dos caracteres na parte principal do resultado vem diretamente da linha apropriada da matriz original, contando a partir da parte inferior, enquanto na parte extra do resultado, a linha de origem sobe uma linha para cada coluna adicional. A coluna de origem para as duas metades do resultado é igual à coluna de destino movida uma coluna para a esquerda para cada linha de origem acima da parte inferior.fonte
Oitava, 57 bytes
fonte
Python 3, 247 bytes
fonte
join(i) for
.Python 2, 150 bytes
Recebe entrada como lista de strings.
fonte
Clojure, 194 bytes
Implementado da maneira mais difícil, agrupando caracteres
G
e gerando linhas.Toma a entrada como um
vec
devec
s como[[\a \b \c \d] [\1 \2 \3 \4] [\W \X \Y \Z]]
. Exemplo:fonte