O desafio
Dada uma placa de bagatela como a abaixo:
| |
| /\ / |
| \ /|
| \ \ /\ \ |
| \ / \ |
|\ / / \ |
| \ / \ |
| \ |
| \ / \ /\ \ |
|\ / / \ /|
| / |
| /\ / / |
| / |
|\ / / / |
| |
----------------------
sua tarefa é transformar uma lista de 'arremessos' em uma pontuação.
O quadro sempre terá 20 caracteres (mais 2 arestas) de largura, mas de altura variável. Cada 'arremesso' é um número que representa onde a bola cai no tabuleiro, começando em 0 na extrema esquerda até 19 na extrema direita. Cada bola cairá diretamente, a menos que encontre a /ou a \. O encontro a /move a bola uma coluna para a esquerda e a \move a bola uma coluna para a direita. Depois de ser deslocada, a bola continua reta como antes. A pontuação para um arremesso depende de onde a bola bate no fundo do tabuleiro.
As pontuações para cada posição final são as seguintes:
| |
----------------------
01234567899876543210
e são iguais para todas as placas. A primeira e a última linha estarão sempre vazias. A bola é garantido para alcançar o fundo, independentemente de onde é retirado, então não haverá placas onde ele pode ficar preso por \/, \|ou |/combinações.
Entrada
A entrada estará em STDIN e consistirá no quadro seguido por uma linha em branco seguida por uma lista de números separados por espaço representando os arremessos.
Resultado
Ouput deve ser a pontuação total para o jogo em questão.
Alguns exemplos
Entrada
| |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| \ |
| |
| |
----------------------
1 4 2 19 0 2 4 3 17 13 16
Resultado
9
Entrada
| |
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
----------------------
15 10 3 8 18 19 0 6 7 10
Resultado
72
Entrada
| |
| ////////////////// |
| \\\\\\\\\\\\\\\\\\ |
| ////////////////// |
| \\\\\\\\\\\\\\\\\\ |
| ////////////////// |
| \\\\\\\\\\\\\\\\\\ |
| ////////////////// |
| \\\\\\\\\\\\\\\\\\ |
| ////////////////// |
| \\\\\\\\\\\\\\\\\\ |
| |
----------------------
1 4 18 17 14 2 0 19 15
Resultado
18
Scripts de teste
Eu usei alguns scripts de teste escritos por Joey e Ventero (espero que eles não se importem ...) para criar alguns testes para esta tarefa: -
Uso: ./test [your program and its arguments]
Este é o codegolf - a solução mais curta vence.