As guerras sagradas foram travadas por espaços versus abas. (E, claro, os espaços, sendo objetivamente superiores, venceram.) - Alex A.
S OMe PEO p le ainda se recusam a uma ccept que WHI c h é Cl e arly s upreme. Você acaba de receber um arquivo usando o InCor re ct, b ad, e inf e forma rior do whi t espace, e agora t ele cont e nts do arquivo a r e contaminado e arruinado.
Você decide que também pode mostrar à pessoa que lhe enviou o arquivo o quão errado eles estão - violentamente.
Descrição
Como o título sugere, seu desafio é pegar um arquivo que contenha uma ou mais guias:
this is an evil tab onoes
e os despedaça sem piedade.
this is an evil tab
o
n
o
e
s
Observe que o software Stack Exchange transforma abas literais em quatro espaços (porque é correto); portanto, as abas nesta postagem serão exibidas como quatro espaços. A entrada para o seu programa, no entanto, conterá guias reais.
Desafio
A solução deve ter uma única string como entrada, que pode conter ASCII, novas linhas e guias imprimíveis. Sempre haverá pelo menos uma única guia na entrada.
A saída deve ser a mesma sequência, com as seguintes regras aplicadas:
Inicie o cursor nas coordenadas (0,0) e com uma direção à direita. As coordenadas são (coluna, linha), indexadas a zero e a direção é para que lado você deve mover o cursor após imprimir um caractere.
Para cada caractere na sequência:
Se for uma nova linha, vá para as coordenadas (0, n), onde n é o número de novas linhas na sequência até agora (incluindo esta) e redefina a direção para a direita.
Se for uma guia, produza dois espaços, gire a direção do cursor 90 graus no sentido horário e produza mais dois espaços, efetivamente "quebrando" a guia ao meio. Aqui está um exemplo visual, onde uma guia é representada como
--->
e espaços como·
:foo--->bar--->baz
torna-se
foo··· · b a r · · zab··
Caso contrário, basta imprimir o caractere no cursor e mover o cursor um passo na direção atual.
Como você está lendo a string do começo ao fim, é possível que você tenha que escrever "em cima" dos caracteres existentes - tudo bem. Por exemplo, a entrada
foo--->bar
spaces are superior
deve resultar em uma saída de
foo
b
spaces are superior
r
Você pode escolher se "abas quebradas" devem substituir outros caracteres - a intenção original era que não, mas a especificação era ambígua, portanto, essa é sua decisão.
Além disso, depois de aplicar essas regras, você também pode
adicione ou remova quantos espaços finais você desejar.
adicione no máximo uma única nova linha à direita.
A entrada nunca conterá espaços à direita; também nunca conterá novas linhas iniciais ou finais. Você também pode sempre assumir que nunca precisará gravar em uma coluna ou linha menor que 0 (ou seja, fora da tela).
Caso de teste
As guias neste caso de teste são representadas como --->
porque, caso contrário, o SE as devora.
Entrada:
Test case. Here's a tab--->there's a tab--->everywhere a tab--->tab--->this is some more text
blah
blah
blah blah blah blah blah blah--->blaah--->blaah--->blah--->blaaaaah--->blah--->blah--->blah--->blah--->blah
Saída:
Test case. Here's a tab
blah
blah t
blah blah blah blah blah blah
blaablah
r b
e l b
h 'h a l
a sa a a
l l h h
this is some mobe tbxt
haalhalb
b a
a b
t
bat a erehwyreve
Animação chique:
Regras
- Isso é código-golfe , então o código mais curto em bytes vencerá!
(0,0)
você quer dizer que precisamos limpar o console primeiro ou você apenas quer dizer a posição padrão do cursor?