Como uma celebração do bom e velho bloco de notas , trataremos retornos de carro e feeds de linha como o que eles originalmente queriam dizer, e não como eles são usados hoje.
Dada uma sequência que consiste em ASCII imprimível mais alimentações de linha (␊; LF; esc \n
; hex 0A; dec 10) e retornos de carro (␍; CR; esc \r
; hex 0D; dec 13), faça com que o Try It Online mostre como os caracteres imprimíveis seria posicionado se impresso em uma impressora que leva esses dois caracteres de controle literalmente:
- após uma alimentação de linha, continue imprimindo uma linha mais abaixo
- em um retorno de carro, continue imprimindo pela borda esquerda
- vários retornos de carro consecutivos se comportam como um único retorno de carro
Devido aos dispositivos modernos terem problemas com o impacto excessivo , uma execução de um ou mais retornos de carro, exceto no início da entrada, nunca ocorrerá sem pelo menos um avanço de linha anterior e / ou seguinte. No entanto, duas execuções de retorno de carro podem ser separadas por um único avanço de linha.
Qualquer quantidade de espaço em branco à direita adicional é aceitável, tanto no lado direito de todas as linhas quanto abaixo do texto inteiro, desde que pelo menos a quantidade de espaço em branco fornecida na entrada seja preservada.
Exemplos (usando \n
e \r
para avanço de linha e retorno de carro)
Lorem ipsum dolor sit amet,
Lorem ipsum dolor sit amet,
consectetur adipiscing\nelit, sed
consectetur adipiscing
elit, sed
do eiusmod\r\ntempor incididunt\n\n ut labore
do eiusmod
tempor incididunt
ut labore
et dolore\n\rmagna \r\r\naliqua. Ut
(observe os espaços à direita)
et dolore
magna
aliqua. Ut
\nenim ad minim veniam,\n\r quis nostrud
enim ad minim veniam, quis nostrud
\rexercitation\r\n\rullamco laboris\n\r\nnisi ut aliquip ex\n\n\rea commodo consequat.\n\n
exercício ullamco laboris nisi ut aliquip ex e o consequodo.
fonte
stty -onlcr;cat
.Respostas:
Carvão , 10 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Desative o preenchimento direito.
Loop sobre a entrada.
Imprimir o caractere atual. Ele lida automaticamente
\n
(que o Charcoal trata como\v
neste contexto), mas o Charcoal se traduz\r
em\r\n
, então ...... verifique se há
\r
...... e se sim, volte para uma linha.
fonte
l
bandeira do seu link do TIO?Ruby ,
2417 bytesExperimente online!
Ele não funciona no TIO, mas funciona no console do Linux.
fonte
tr "
eu acho.\n
s em\v
quando executado em um console Linux.Java 10,
211207206 bytesExperimente online.
Explicação:
Resposta antiga antes da alteração do desafio
151148 bytes :Explicação:
Não funciona no TIO, funciona no prompt de comando do Windows:
fonte
JavaScript (Node.js) , 85 bytes
Experimente online!
fonte
Python 2 ,
150128122104103 bytesExperimente online!
Salvou:
fonte
l,n,i=[l,l+c,l+' '*i*n+c,n,1,0,0,i,i+1]['\r\n'.find(c)%3::3]
é apenas um pouco mais curto.C (gcc) ,
10094 bytesAssume a codificação ASCII (
'\r'==13
,'\n'==10
); ajuste para se adequar a outros sistemas.Experimente online! (requer Javascript)
Versão legível
c
é a posição atual da coluna;d
é o número de espaços que devem ser inseridos antes de um caractere imprimível. Ambos são assumidos como zero na entrada para a função.Programa de teste
fonte
char
s são apenasint
s pequenos , eles devem ser intercambiáveis (em teoria). Talvezgcc
vai fazer uma conversão implícitac,d
. Sua função deve - sem outro código de limpeza - poder executar várias vezes. Portanto, você provavelmente precisará adicionar ac=d=0
.Python 3 ,
10194 bytesCom base na resposta do TFeld .
Experimente online!
Ungolfed
fonte
Limpo ,
9291 bytes-1 graças a Laikoni!
Nota:
\
in\r
é omitido de bytecount, pois o CG do Linux manipula literal\r
e\n
s.Nota: O Windows CG requer
\n
e pode\r
ser escapado; portanto, +3 se precisar ser executado no Windows.Experimente online!
Uma aplicação parcial de
? :: Int [Char] -> [Char]
com 0 como o primeiro argumento inicial. Isso desce através de cada caractere, mantendo o controle de quantos atravessados, a contagem é redefinida quando encontra um retorno de carro e, quando encontra uma nova linha, adiciona espaços iguais ao número de caracteres atravessados nesse ponto.fonte
?_[]=[]
pode ser?_ e=e
.Haskell ,
9387 bytesExperimente online!
Solução bastante simples. # é uma função infix que cria recursivamente a saída, um caractere de cada vez, mantendo um contador de posição de caractere (n) e um sinalizador para quando adicionar espaços após uma nova linha (x).
fonte
c
, usar eml$r
vez dec 0 0r
ec _ _ e=e
(ou melhor(_#_)e=e
).