Você conhece aqueles brinquedos de madeira com pequenos rolamentos de esferas onde o objetivo é se movimentar pelo labirinto? Isso é meio assim. Dado um labirinto e uma série de jogadas, determine onde a bola termina.
A prancha é mantida na vertical e a bola se move apenas por gravidade quando a prancha é girada. Cada "movimento" é uma rotação (em radianos).
O labirinto é simplesmente paredes circulares concêntricas, com cada parede tendo exatamente uma abertura no corredor externo, semelhante a esta (suponha que essas paredes sejam circulares e não pontiagudas):
Como você pode ver, a bola começa no meio e está tentando sair. A bola cairá instantaneamente assim que a orientação correta for alcançada, mesmo que esteja no meio de uma rotação. Uma única rotação pode fazer com que a bola caia por várias aberturas. Por exemplo, uma rotação >= n * 2 * pi
é suficiente para escapar de qualquer labirinto.
Para os propósitos do jogo, uma bola localizada dentro dos 0.001
radianos da abertura é considerada um "encaixe" e passará para o próximo corredor.
Entrada:
A entrada está dividida em duas partes:
O labirinto é dado por um número inteiro que
n
representa quantas paredes / aberturas existem no labirinto. Isto é seguido porn
linhas, com um número em cada, representando onde está a passagem para o próximo corredor.Os movimentos são dados como um número inteiro
m
representando quantos movimentos foram realizados, seguidos (novamente em linhas separadas) porm
rotações no sentido horário da placa em radianos (o negativo é anti-horário).
Todas as posições de passagem são dadas como 0 rad = up
, com radianos positivos no sentido horário.
Para a imagem de amostra acima, a entrada pode ser assim:
7 // 7 openings
0
0.785398163
3.14159265
1.74532925
4.71238898
4.01425728
0
3 // 3 moves
-3.92699082
3.14159265
0.81245687
Saída:
emita o número do corredor em que a bola termina. Os corredores são indexados a zero, começando do centro, para você começar 0
. Se você passar por uma abertura, estará no corredor 1
. Se você escapar de todo o labirinto, imprima qualquer número inteiro>= n
Para a entrada de amostra, há três movimentos. O primeiro fará com que a bola caia por duas aberturas. O segundo não encontra uma abertura, e o terceiro encontra uma . A bola está agora no corredor 3
, então a produção esperada é:
3
O comportamento é indefinido para entrada inválida. A entrada válida é bem formada, com n >= 1
e m >= 0
.
A pontuação é um código de golfe padrão, o menor número de bytes vence. As brechas padrão são proibidas. A entrada não deve ser codificada, mas pode ser obtida a partir de entradas, argumentos, console, etc. padrão. A saída pode ser para console, arquivo, o que for, basta torná-la visível em algum lugar.
1
, estaria trabalhando apenas com buracos grandes, sem pular bolas para o centro do buraco quando elas caem.Respostas:
Perl,
211191Com novas linhas e recuo para facilitar a leitura:
O número de movimentos na entrada é descartado, eof do stdin indica o fim dos movimentos.
fonte
JavaScript 200
EDIT : Aqui está um exemplo animado que prova que esse solucionador funciona: http://jsfiddle.net/F74AP/4/
A função deve ser chamada passando a string de entrada.
Aqui está a chamada do exemplo dado pelo OP:
Retorna
3
como pretendido.fonte