¿Conoces esos juguetes de madera con pequeños rodamientos de bolas donde el objeto es moverse por el laberinto? Esto es un poco así. Dado un laberinto y una serie de movimientos, determine dónde termina la pelota.
El tablero se sostiene verticalmente, y la bola se mueve solo por gravedad cuando se gira el tablero. Cada "movimiento" es una rotación (en radianes).
El laberinto es simplemente paredes circulares concéntricas, con cada pared que tiene exactamente una abertura en el corredor exterior, similar a esto (suponga que esas paredes son círculos y no puntiagudas):
Como puede ver, la pelota comienza en el medio y está tratando de salir. La pelota se caerá instantáneamente tan pronto como se logre la orientación correcta, incluso si está en la mitad de una rotación. Una sola rotación puede hacer que la pelota caiga a través de múltiples aberturas. Por ejemplo, una rotación >= n * 2 * pi
es suficiente para escapar de cualquier laberinto.
Para los propósitos del juego, una pelota ubicada dentro de los 0.001
radianes de la apertura se considera un "ajuste" y caerá al siguiente corredor.
Entrada:
La entrada está en dos partes:
El laberinto está dado por un número entero que
n
representa cuántas paredes / aberturas hay en el laberinto. Esto es seguido porn
líneas, con un número en cada una, que representa dónde está el pasaje al siguiente corredor.Los movimientos se dan como un número entero que
m
representa cuántos movimientos se tomaron, seguidos (nuevamente en líneas separadas) porm
rotaciones en sentido horario del tablero en radianes (negativo es en sentido antihorario).
Todas las posiciones de paso se dan como 0 rad = up
, con radianes positivos en sentido horario.
Para la imagen de muestra anterior, la entrada puede verse así:
7 // 7 openings
0
0.785398163
3.14159265
1.74532925
4.71238898
4.01425728
0
3 // 3 moves
-3.92699082
3.14159265
0.81245687
Salida:
Muestra el número de corredor en el que termina la bola. Los corredores están indexados a cero, comenzando desde el centro, por lo que comienza 0
. Si pasas por una abertura, estás en el pasillo 1
. Si escapas de todo el laberinto, genera cualquier número entero>= n
Para la entrada de muestra, hay tres movimientos. El primero hará que la pelota caiga a través de dos aberturas. El segundo no encuentra una abertura, y el tercero encuentra una . La pelota ahora está en el corredor 3
, por lo que la salida esperada es:
3
El comportamiento no está definido para entradas no válidas. La entrada válida está bien formada, con n >= 1
y m >= 0
.
La puntuación es el código estándar de golf, gana el menor número de bytes. Las lagunas estándar están prohibidas. La entrada no debe estar codificada, sino que puede tomarse de la entrada estándar, argumentos, consola, etc. La salida puede ser a la consola, archivo, lo que sea, simplemente hacer que la salida sea visible en algún lugar.
1
, simplemente estaría trabajando con agujeros grandes, no saltando bolas al centro del agujero cuando caen.Respuestas:
Perl,
211191Con nuevas líneas y sangría para facilitar la lectura:
El número de movimientos en la entrada se descarta, el eof de stdin indica el final de los movimientos.
fuente
JavaScript 200
EDITAR : Aquí hay un ejemplo animado que demuestra que este solucionador funciona: http://jsfiddle.net/F74AP/4/
La función debe llamarse pasando la cadena de entrada.
Aquí está la llamada del ejemplo dado por el OP:
Vuelve
3
según lo previsto.fuente