Desafio
Dada uma grade retangular de caracteres ascii imprimíveis como uma sequência ou através de entrada padrão, escreva uma função ou programa que colecione os caracteres não espaciais em uma pilha na parte inferior.
As regras:
- A saída possui as mesmas dimensões e caracteres da entrada.
- Um caractere não espacial em
(row a,column b)
não pode ter um caractere de espaço' '
em(a-1, b)
,(a-1,b-1)
ou(a-1,b+1)
, onde as linhas são numeradas da parte inferior. Isso tem a conseqüência de que todas as pilhas verticais devem entrar em colapso lateralmente. - Um caractere não espacial pode viajar na maioria dos
(initial height - final height)
lugares para a esquerda ou direita (veja a Fig. 1). - Você pode assumir que a imagem possui espaço suficiente para recolher sem que caracteres caiam da tela.
Figura 1: possíveis locais finais para os caracteres @#$
mostrados como x,y,z
, respectivamente.
..............
...@..........
..xxx.........
.xxxxx...#....
xxxxxxx.yyy.$.
A ordem na qual os caracteres são recolhidos pode ser escolhida livremente. Os espaços à direita não são bons, mas as novas linhas à direita são.
Isso é código-golfe , então a resposta mais curta em bytes vence!
Exemplo
(__)
(oo)
/------\/
/ | ||
* /\---/\
~~ ~~
..."Have you mooed today?"...
Uma saída possível:
--(_
/----|/|(o_)
/|/~\---~\\/o)
..."Have*you~mooed~today?"...