Desafio:
Dada uma lista de cadeias de linhas múltiplas, sobreponha-as (na parte superior esquerda) e produza o resultado.
Exemplo:
Entrada: ["aaaa\naaaa\naaaa\naaaa","bb\nbb\nbb","c"]
Saída:
cbaa
bbaa
bbaa
aaaa
Regras do desafio:
- O formato de entrada é flexível. Você pode obter a entrada como uma lista 2D de linhas (ou seja
[["aaaa","aaaa","aaaa","aaaa"],["bb","bb","bb"],["c"]]
) ou lista 3D de caracteres (ou seja[[["a","a","a","a"],["a","a","a","a"],["a","a","a","a"],["a","a","a","a"]],[["b","b"],["b","b"],["b","b"]],[["c"]]]
). Você tem permissão para receber todas as entradas uma por uma através do STDIN. Etc. - O formato de saída é rigoroso. Você pode optar por imprimir ou retornar a sequência de várias linhas. (Se o seu idioma não tiver seqüências de caracteres, a saída como uma lista 2D de caracteres é permitida como alternativa. Mas somente se o seu idioma não possuir strings.)
- A ordem da lista de entrada é obviamente importante (mas você pode fazer a entrada inversa, se assim o desejar).
- As entradas conterão apenas ASCII imprimível no intervalo unicode (
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
). - As entradas serão apenas retângulos (portanto, sem formas estranhas). A saída não é retângulos necessários, no entanto.
- Espaços à direita e uma nova linha à direita são permitidos. Espaços iniciais e / ou novas linhas não.
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta com as regras de E / S padrão , para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código (ou seja, TIO ).
- Além disso, é altamente recomendável adicionar uma explicação para sua resposta.
Casos de teste:
Entrada: ["aaaa\naaaa\naaaa\naaaa","bb\nbb\nbb","c"]
Saída:
cbaa
bbaa
bbaa
aaaa
Entrada: ["12345\n54321","00\n00\n00\n00","001\n011\n012"]
Saída:
00145
01121
012
00
Entrada: ["sm\noo\nmr\nee\nt!\nh_\ni_\nn_\ng_","!@#$%^\n&*()_+\nqwerty\nuiopas","this\nis_a\ntest"]
Saída:
this%^
is_a_+
testty
uiopas
t!
h_
i_
n_
g_
Respostas:
Geléia , 3 bytes
Experimente online!
Não usava Jelly há algum tempo, mas achei que o desafio nos comentários era superável. Muito diretamente usa o lógico e (
a
) para executar a operação de empilhamento entre cada elemento da entrada (/
).Y
é usado para imprimir no formato necessário.fonte
ḷ""/Y
com uma lista de entradas invertida. Nem sabiaa
..JavaScript (Node.js) , 24 bytes
Guardado 2 bytes graças a @Grimy
Supõe que a sequência retornada seja impressa em um terminal que suporte códigos de escape ANSI . Contém o caractere não imprimível ESC, que é escapado (sem trocadilhos), conforme
\x1B
abaixo.Isso não funciona no TIO, mas você pode experimentá-lo online! para ver a saída bruta.
Quão?
As sequências CSI usadas são:
ED (apagar no visor):
ESC[2J
onde2 significa "limpar a tela inteira"
CUP (posição do cursor):
ESC[H
o que significa "move o cursor para a linhan , coluna m " , onde ambos n e m são omitidos e implicitamente definida como 1 (canto superior esquerdo do ecrã).
Saída de exemplo
fonte
;
. Além disso, acho que deve ser "JavaScript + terminal" ou algo semelhante que não concorra com o JavaScript puro.if the last parameter sub-string(s) is empty, the separator preceding it may be omitted
. Como existem apenas duas sub-strings, o separador que precede a última substring é o único e pode ser omitido.\x1B[H
+ necessário? Ele não está começando no canto superior esquerdo por padrão e você só precisa redefini-lo após cada entrada (que é o que a junção faz)? Ou ele é iniciado inicialmente em outro lugar por padrão e você precisa explicitamente iniciar na posição do cursor para que seja redefinido com êxito nessa posição na junção?f=a=>print(`\x1B[H`+a.join`\x1B[H`)
comf(input_here)
produziria a mesma saídaprint(f(input_here))
? Portanto, não vejo por que você não teria permissão para omitirprint
e simplesmente retornar uma string.R ,
120,111110107 bytesExperimente online!
Uma função que aceita uma lista de matriz de caracteres (entrada 3D é aceita).
(como você pode notar pela contagem de bytes, isso não é muito fácil de fazer no R ...)
fonte
array
vez dematrix
!ncol
(você pode transpor para obternrow
).Python 2 , 88 bytes
Experimente online!
Explicação (com exemplo):
Toma uma lista 2D como entrada.
Primeiro, a lista de entrada é compactada, para obter as linhas de cada retângulo de entrada (
map(None,l)
o mesmo é o maior zip):Cada uma dessas linhas é filtrada para se removida
None
e compactada novamente:Qual é uma lista de caracteres para cada posição do resultado desejado. Essas listas são filtradas novamente e a última é obtida:
Por fim, as listas resultantes são unidas e impressas:
fonte
R,
10797 bytesNão parece funcionar no TIO, o que pode estar relacionado ao uso do
\r
caractere de retorno de carro. Ele funciona na minha instalação local do R.Recebe entrada como uma lista que contém um vetor de linhas:
Faz um loop nas linhas de cada retângulo, imprimindo um retorno de carro após cada um, reiniciando a linha.
Se esticarmos um pouco as regras, podemos acabar com a verificação do comprimento da entrada e fazer um loop infinito, imprimindo uma enorme quantidade de novas linhas:
R, 85 bytes
fonte
\r
e bem-vindo de volta! Apenas uma observação, acho que isso funciona apenas em sessões interativas R (quandointeractive()
retorna verdadeiro)rscript
partir da linha de comando. Eu suspeito que é uma coisa do Windows / Linux, já que o Windows usa\r\n
para novas linhas e Linux\n
.APL (Dyalog Unicode) , SBCS de 22 bytes
Função de prefixo tácito anônimo, tendo como argumento a lista de matrizes de caracteres 2D. Imprime.
Experimente online!
Isso funciona criando uma tela, anexando-a à lista de blocos e reduzindo (dobrando) com uma função que coloca os blocos no canto.
↑
misture o bloco 2D para criar um bloco 3D ortogonal, preenchendo-o com espaços conforme necessário1⌷
pegue a primeira camada⊂
coloque que, em∘
seguida,⌽,
anexe a lista invertida de blocos(
…)
Aplique a seguinte função tácita:{
…}/
Reduza usando a seguinte lambda anônima:⊢⍵
com o argumento certo como tela ...⍺@(
…)
Altere com os elementos do argumento esquerdo, colocados nos seguintes índices:⍴⍺
a forma do argumento esquerdo⍳
os índices de uma matriz dessa forma⊃
divulgar (porque a redução incluía para reduzir a classificação)fonte
Haskell, 66 bytes
A entrada é feita como uma lista de lista de strings em ordem inversa, por exemplo, para o primeiro caso de teste:
[["c"],["bb","bb","bb"],["aaaa","aaaa","aaaa","aaaa"]]
.Experimente online!
fonte
05AB1E , 12 bytes
Porta da solução python do TFeld
2 bytes salvos graças ao Grimy
Experimente online!
Explicação
Versão alternativa de 14 bytes
Experimente online!
Explicação
fonte
--no-lazy
é a correção para ainda usar um mapa / filtro com impressão para o implícitoy
, para salvar um byte em comparação comvy...,
:) Eu sabia que funcionava na versão herdada, mas na nova versão também geraria o[...]
. Não sabia que isso era devido à falta de--no-lazy
. ;) Quanto à resposta em si, muito legal! Eu sabia que era necessária uma redução cumulativa, mas não consegui resolver o problema quando tentei. Você faz parecer tão fácil ..õζεõK
pode serζεðK
,õζõδK
pode serζðδK
.Tela , 5 bytes
Experimente aqui!
Se sobrepor
/
+\
→X
,-
+|
→+
, etc. estiver correto, 2 bytes funcionarão.fonte
Python 2 , 77 bytes
Experimente online!
fonte
PowerShell 6 , somente console, 20 bytes
com base na resposta de Arnauld . Isso funciona apenas com console e não funciona no TIO.
Experimente online!
PowerShell , 103 bytes
Experimente online!
Desenrolado:
fonte
C # (.NET Core) , 68 + 23 = 91 bytes
23 bytes é para a importação,
using C=System.Console;
Não funciona no TIO, pois não é um console.
Experimente online!
fonte
Ruby , 67 bytes
Entrada é uma lista de linhas. Cria uma lista de linhas e sobrescreve à medida que passa pelas entradas e as junta a uma nova linha (representada pela variável
$/
) no final para corresponder à saída estrita.Experimente online!
fonte
C (GCC, MinGW) 138 bytes
Supõe que CR coloca o cursor no início da linha atual.
Testado com:
fonte
Oitava ,
7167 bytesFunção que pega uma matriz de células vertical de matrizes char e retorna uma matriz char.
Experimente online! Ou verifique todos os casos de teste .
fonte
Javascript (navegador) ,
216208204 bytesMinha tentativa nisso. Não estou feliz com o tamanho e certamente deve haver mais para melhorar, mas não sou tão experiente no golfe.
De qualquer forma, o que ele faz é primeiro dividir todas as strings, depois reverter todas as strings e, em seguida, girar em um bloco de operação reduzido . Em seguida, inverta todas as seqüências novamente e junte-as novamente com novas linhas.
Um agradecimento especial a Kevin Cruijssen por me lembrar que a última parte de um loop for acontece no final e uma economia total de bytes de 8 bytes.
fonte
('')
podem ser dois `para salvar quatro bytes :) 'for(i=0;i<b.length;i++){j=a[i];if(!j)j=b[i];a[i]=b[i].padStart(j.length,j)}
porfor(i=0;i<b.length;a[i]=b[i++].padStart(j.length,j))if(!(j=a[i]))j=b[i];
.j
primeiro é atribuído com(j=a[i])
, a instrução if é concluída comif(!...)j=b[i];
(onde...
está o(j=a[i])
valor atualizado dej
) e, em seguida,;a[i]=b[i++].padStart(j.length,j))
é feita no final da iteração do loop for. Não tenho certeza de onde está o problema e parece funcionar?C (gcc) ,
5147 bytesExperimente online!
-4 bytes graças ao ceilingcat.
Usa as seqüências CSI para salvar / restaurar a posição do cursor. Apenas itera sobre a matriz de cadeias passadas (no mesmo formato que
argv
) e imprime<save position>string<restore position>
para cada uma.Isso deixa o cursor no canto superior esquerdo; portanto, ao executar no terminal, é importante deixar novas linhas suficientes posteriormente para que o prompt não atrapalhe a entrada.
fonte
Japt
-P
, 7 bytesRecebe a entrada como uma matriz de seqüências de várias linhas, produz uma única sequência de várias linhas.
Tente
fonte
Consulta T-SQL,
297295 bytesUsando ¶ como separador e uma variável de tabela como entrada.
Experimente online
fonte
Javascript (navegador),
129124 bytesMinha primeira tentativa no código de golfe. Eu li os links fornecidos nas regras (brechas, regras padrão ...), então espero ter feito algo errado!
Eu mantive as entradas como estão no primeiro post (formulário de matriz plana).
Obrigado a Kevin Cruijssen por salvar 5 bytes.
Testes:
Mostrar snippet de código
fonte
for(a of o){for(l in a){b=a[l],r[l]=(r[l])?b+r[l].slice(b.length):b}}
pode serfor(a of o)for(l in a)b=a[l],r[l]=r[l]?b+r[l].slice(b.length):b;
:)=(r[l])?
qual pode ser removido para=r[l]?
:)r
. Sem ele, o resultado do mapeamento seria retornado.Pitão , 18 bytes
Experimente online!(nota: o próprio código avalia apenas um bloco, o modo de suíte de testes do intérprete executa o programa uma vez para cada linha de entrada)
Baseado na solução Python 2 da TFeld .
Explicação:
para uma explicação de por que o próprio algoritmo funciona, consulte a resposta do TFeld.
fonte
Carvão , 4 bytes
Experimente online (detalhado) ou online (puro) .
Explicação:
Faça um loop sobre a lista de entrada de strings de várias linhas:
E imprima a sequência de linhas múltiplas sem mover o cursor:
fonte