Dada uma sequência em que a primeira linha contém espaços e um ponto ( .
, a "bola"), seguida por linhas que contêm espaços, barras ( /
) e barras invertidas ( \
), determine em qual coluna a bola aterrará após cair da posição inicial . Cada um o /
move para a esquerda por 1 coluna e cada \
um para a direita por 1 coluna.
Entrada de amostra
.
/ \ \
/ /
\ \/ \
\ /\
\ /\ \
\ /
Saída de amostra
A bola começa na coluna 5, bate /
na linha 3, depois os três \
nas linhas 5 a 7 para uma posição final de:
7
Observe que as colunas são indexadas em 1, principalmente para consistência com as convenções do editor de texto.
Casos de borda
Se a bola atingir um /
na primeira coluna, ficará eternamente presa na coluna 0. inexistente. Seu programa deve lidar com isso corretamente imprimindo 0
.
Se a bola atingir um dos lados de um \/
padrão, o resultado será indefinido. É permitido ao seu programa terminar sem saída, executar um loop infinito ou imprimir uma mensagem de erro (minha solução é impressa -1
), mas não deve imprimir nada que possa ser visto como uma saída válida.
Se a bola acertar a barra esquerda em um \\
padrão, ela deve terminar diretamente abaixo da barra direita, não à direita dela. A solução que eu originalmente imaginava era propensa a errar, então não siga esse caminho!
Pode ou não haver espaços após a .
ou a última /
ou \
em cada linha. Seu programa não deve contar com esse preenchimento disponível. Em uma nota semelhante, pode ou não haver linhas após a primeira linha.
Você pode assumir que a primeira linha terá zero ou mais espaços e exatamente um .
. Linhas subsequentes, se houver, terão zero ou mais espaços e zero ou mais barras.
Detalhes da implementação
Seu programa pode ler de um arquivo (especificado como argumento da linha de comando) ou ler da entrada padrão, conforme sua conveniência.
Seu programa deve gerar um único número na saída padrão. (Sim, uma nova linha à direita está correta. Sim, o número pode ter mais de um dígito.)
Casos de teste
Entrada:
.
Resultado:
1
Observe que a entrada aqui é exatamente um byte. Este é o menor caso que você deve conseguir lidar.
Entrada:
. \ \ \ \
Resultado:
6
Observe que não há espaços após essas barras.
Entrada:
. / /\\ / \ //\ \/// // \\/ \/\ /\/
Resultado:
0
Entrada:
. / / / \\\ /\\ / \
Resultado:
1
Entrada:
. \ / / \
Resultado:
4
Entrada:
. \ \/\/\/
Resultado:
(anything but a nonnegative number)
Considerações finais
Essa pergunta é semelhante à simulação de um computador do tipo bola de bilhar (com base na gravidade) , mas significativamente mais simples, portanto, esperamos que ganhe mais interesse.
Eu tenho uma solução de 169 caracteres em Python. Tenho certeza de que os talentosos jogadores de golfe daqui podem rasgar esse recorde em pedaços. : ^)
Como o código é golfe , a resposta mais curta em caracteres será aceita no final do mês!