Parece que me he metido en un aprieto. Literalmente. ¡Dejé caer un montón de pepinillos en el suelo y ahora están todos dispersos! Necesito que me ayudes a recogerlos a todos. Oh, ¿mencioné que tengo un montón de robots a mis órdenes? (También están todos dispersos por todo el lugar; soy realmente malo organizando las cosas).
Debe tomar la entrada en forma de:
P.......
..1..2..
.......P
........
P3PP...4
.......P
es decir, múltiples líneas de .
, P
(pickle) o un dígito (ID del robot). (Puede suponer que cada línea tiene la misma longitud, rellenada con .
). Puede ingresar estas líneas como una matriz, o sorber desde STDIN, o leer en una sola línea separada por comas, o leer un archivo, o hacer lo que quiera Me gusta tomar la entrada.
Su salida debe estar en forma de n
líneas, donde n
es la ID de robot más alta. (Las ID del robot siempre serán secuenciales a partir de 1.) Cada línea contendrá la ruta del robot, formada por las letras L
(izquierda), R
(derecha), U
(arriba) y D
(abajo). Por ejemplo, aquí hay una salida de ejemplo para ese rompecabezas:
LLU
RDR
LRRR
D
También puede ser
LLU RDR LRRR D
O
["LLU","RDR","LRRR","D"]
O cualquier formato que desee, siempre que pueda saber cuál se supone que es la solución.
Su objetivo es encontrar la salida óptima, que es la que tiene menos pasos. La cantidad de pasos se cuenta como la mayor cantidad de pasos de todos los robots. Por ejemplo, el ejemplo anterior tenía 4 pasos. Tenga en cuenta que puede haber múltiples soluciones, pero solo necesita generar una.
Puntuación:
- Su programa se ejecutará con cada uno de los 5 casos de prueba (generados aleatoriamente).
- Debe agregar los pasos de cada ejecución, y ese será su puntaje.
- Ganará el puntaje total más bajo acumulado.
- Es posible que no codifique para estas entradas específicas. Su código también debería funcionar para cualquier otra entrada.
- Los robots pueden pasar unos a otros.
- Su programa debe ser determinista, es decir, la misma salida para cada ejecución. Puede usar un generador de números aleatorios, siempre que esté sembrado y produzca consistentemente los mismos números multiplataforma.
- Su código debe ejecutarse en 3 minutos para cada una de las entradas. (Preferiblemente mucho menos).
- En caso de empate, la mayoría de los votos positivos ganarán.
Aquí están los casos de prueba. Se generaron aleatoriamente con un pequeño script Ruby que escribí.
P.......1.
..........
P.....P...
..P.......
....P2....
...P.P....
.PP..P....
....P....P
PPPP....3.
.P..P.P..P
....P.....
P....1....
.P.....PP.
.PP....PP.
.2.P.P....
..P....P..
.P........
.....P.P..
P.....P...
.3.P.P....
..P..P..P.
..1....P.P
..........
.......2P.
...P....P3
.P...PP..P
.......P.P
..P..P..PP
..P.4P..P.
.......P..
..P...P...
.....P....
PPPP...P..
..P.......
...P......
.......P.1
.P..P....P
P2PP......
.P..P.....
..........
......PP.P
.P1..P.P..
......PP..
P..P....2.
.P.P3.....
....4..P..
.......PP.
..P5......
P.....P...
....PPP..P
¡Buena suerte, y no dejes que los pepinillos se queden allí por mucho tiempo, o se echarán a perder!
Ah, y ¿por qué pepinillos, preguntas?
Por qué no?