Introdução
Sísifo estava tendo alguns problemas no trabalho recentemente. Parece que ele simplesmente nunca faz nada e gostaria de encontrar uma solução para esse problema.
Seu emprego atual exige rolar uma pedra morro acima. Ele costuma fazer bem seu trabalho, mas toda vez que está perto do topo da colina, ele desce novamente.
Ele está realmente frustrado com seu trabalho e quer resolver o problema cientificamente, fazendo com que um computador simule a rocha rolando ladeira abaixo.
Acontece que Sísifo não é particularmente bom em programação, então talvez você possa ajudá-lo?
O desafio
Após esta introdução boba, vamos aos negócios. Seu programa receberá uma ilustração da colina e da rocha parecida com esta:
#o
##
###
######
########
Onde #
representa uma parte da colina e o
representa a rocha.
Agora você precisa implementar um programa que move a camada 1 do rock para baixo. Por exemplo, a saída do acima deve ser:
#
##o
###
######
########
Se houver uma área horizontalmente plana, a colina rola horizontalmente, então ...
o
########
... isso faria a pedra rolar para o lado.
o
########
Se houver uma área vertical, a rocha cai um passo, então ...
#o
#
#
#####
... renderia ...
#
#o
#
#####
Você também receberá a largura e a altura da imagem, respectivamente, em uma linha acima da imagem. Portanto, em resumo, nossa amostra de entrada seria assim:
10 5
#o
##
###
######
#########
(Observe que os espaços em branco aqui são espaços. Selecione o texto e veja o que quero dizer.)
Alguns detalhes
- Quando o rock já está na última linha ao executar o programa, você pode optar por encerrar o programa ou emitir a entrada inalterada
- A colina só desce
Seu programa deve formatar a saída exatamente da mesma forma que a entrada (incluindo as dimensões); portanto, se você canalizar a saída do programa para si próprio, ele calculará a próxima etapa.
Você pode assumir que sempre existe um caminho para o final, portanto, a entrada em que o caminho está "bloqueado" pode causar um comportamento indefinido
Você pode assumir que sempre há um espaço na última linha. A rocha deve "descansar" lá, então, depois de chamar o programa algumas vezes, sempre canalizando sua saída para si mesma, você deve acabar com a rocha na última linha, colocando onde estava o espaço anteriormente.
Você pode aceitar qualquer forma que desejar (stdin, arquivo, ...). Você precisa postar o programa INTEIRO (para que todas as variáveis pré-inicializadas contem como código).
As linhas são terminadas com
\n
.Você pode obter alguns exemplos de entradas aqui (certifique-se de copiar os espaços corretamente!)
Isso é código-golfe , então a submissão de trabalho com o mínimo de bytes vence.
O vencedor será escolhido em 26 de julho de 2014. Você pode postar soluções depois disso, mas não poderá vencer
Se você tiver alguma dúvida, me informe nos comentários.
Feliz golfe!
#
s, então existe um espaço no final porque a largura é 10. Nesse caso (após algumas iterações), a rocha ficava onde o espaço em branco está (portanto, na parte inferior) -Esquina direita).