Dada a entrada de uma imagem artística ASCII, produza a arte ASCII em itálico.
Para colocar em itálico a arte ASCII:
Insira zero espaços antes da última linha, um espaço antes da segunda e última linha, dois espaços antes da terceira e última linha, etc.
Remova qualquer espaço em branco extra à esquerda que possa ter sido criado. Ou seja, se cada linha tiver pelo menos
n
espaços anteriores, remova osn
espaços do início de cada linha.Substitua todos
\
s com|
, todos|
s com/
e todos/
s com_
. Mantenha os existentes_
iguais.A entrada é garantida para conter apenas os caracteres
\|/_
e espaço.
Por exemplo, a entrada
/\/\/\ /\/\/\ /\/\/\ /\/\/\
/\ /\ /\ /\ /\ /\
/\/\/\ /\/\/\ /\ /\ /\/\
/\ /\ /\ /\ /\
/\ /\ /\/\/\ /\/\/\
deve produzir
_|_|_| _|_|_| _|_|_| _|_|_|
_| _| _| _| _| _|
_|_|_| _|_|_| _| _| _|_|
_| _| _| _| _|
_| _| _|_|_| _|_|_|
que, por sua vez, fornecido como entrada, produz
_/_/_/ _/_/_/ _/_/_/ _/_/_/
_/ _/ _/ _/ _/ _/
_/_/_/ _/_/_/ _/ _/ _/_/
_/ _/ _/ _/ _/
_/ _/ _/_/_/ _/_/_/
o que produziria
______ ______ ______ ______
__ __ __ __ __ __
______ ______ __ __ ____
__ __ __ __ __
__ __ ______ ______
A entrada e a saída podem ser uma única sequência (com nova linha à direita opcional) ou uma matriz de linhas.
Como esse é o código-golfe , o código mais curto em bytes será vencedor.
Casos de teste extras:
|||||
/////
\\\\\
_____
/////
_____
|||||
_____
________
________
(ou seja, a entrada da cadeia vazia resulta na saída da cadeia vazia)
Respostas:
CJam,
4338 bytesRequer que a entrada seja preenchida em um retângulo.
Experimente online!
Explicação
fonte
G
, a transformação o reduzirá ao topo.Pyth, 32
Experimente aqui ou execute o Test Suite
Cada linha possui vários espaços à direita. Isso funciona aplicando
.r
qual é a rotação interna para cada linha da string. A rotação pega cada caractere na string que corresponde a um no outro argumento"\|/__"
e o substitui pelo próximo caractere. O sublinhado duplo evita que os sublinhados se tornem barras invertidas. As cadeias também são preenchidas com base em seu índice.Feito isso, as linhas são compactadas e filtramos cada coluna que contém apenas espaços, até que uma delas não. Em seguida, descompactamos e ingressamos em novas linhas.
fonte
MATL ,
383329 bytesAs linhas de saída têm espaços à direita para corresponder à linha mais longa (isso é permitido pelo desafio).
Entrada é uma matriz de células (lista) de seqüências de caracteres. A matriz usa chavetas e as seqüências de caracteres usam aspas simples, como a seguir (clique em cada link para Experimentar online! ).
Primeiro exemplo :
Segundo exemplo :
Terceiro exemplo :
Explicação
A matriz é invertida inicialmente. Cada sequência é processada em um loop e a sequência modificada é empurrada para a pilha. O processamento consiste em substituir os caracteres e anexar vários espaços. O número de espaços é igual ao número atual de elementos na pilha (graças ao fato de a matriz ter sido invertida).
Após o loop, as seqüências são coletadas em uma matriz, que é invertida, convertida em uma matriz de caracteres 2D e descartada de espaços iniciais indesejados: espaços iniciais presentes em todas as linhas da matriz de caracteres 2D.
fonte
JavaScript (ES6),
171149148 bytesAceita e retorna linhas como uma matriz de seqüências de caracteres.
Editar: salvou 22 bytes graças a @ user81655. Economizou 1 byte ao perceber que a entrada é limitada a 5 caracteres
\|/_
e espaço.fonte
replace
s podem ser combinados em.replace(/[\\|/]/g,m=>"|/_"["\\|/".indexOf(m)])
,match(/ */)
podem sermatch` *`
, os dois primeirosmap
s podem ser combinados ema.map(s=>(t=' '.repeat(--i)+s,(l=t.match` *`[0].length)<n?n=l:l,t),...
, parênteses externos ((a=...)
) agora podem ser removidos. 149 bytes:a=>a.map(s=>(t=' '.repeat(--i)+s,(l=t.match` *`[0].length)<n?n=l:l,t),n=i=a.length).map(s=>s.slice(n).replace(/[\\|/]/g,m=>"|/_"["\\|/".indexOf(m)]))
replace
.)Dyalog APL (versões mais antigas),
2348 bytesAjustar o espaço em branco é caro:
Isso requer
⎕ML←0
, que era o padrão até recentemente .fonte