Visión general
Perlas (o Masyu) es un juego de lógica jugado en una cuadrícula. Hay perlas blancas y negras colocadas en la cuadrícula. El objetivo es formar un solo bucle cerrado que viaje a través de cada perla usando solo segmentos de línea recta y ángulos rectos.
Hay algunas reglas que rigen cómo interactúa el bucle con las perlas:
- Las perlas blancas deben viajar directamente , pero el bucle debe girar en la celda anterior y / o siguiente en su camino.
- Las perlas negras deben estar activadas , pero el bucle debe viajar directamente a través de las celdas siguientes y anteriores en su camino.
- El bucle no debe cruzarse ni cruzarse de otro modo. Todas las celdas tienen exactamente cero o dos entradas / salidas de bucle.
Un ejemplo de rompecabezas de Wikipedia (y su solución):
Tu objetivo es resolver un rompecabezas dado. Si hay varias soluciones posibles, no importa cuál le dé.
Entrada
La entrada será una cuadrícula cuadrada sin resolver . El ejemplo que se muestra arriba se vería así:
..w.w.....
....w...b.
..b.b.w...
...w..w...
b....w...w
..w....w..
..b...w...
w...b....w
......ww..
..b......b
w
es una perla blanca, b
es una perla negra y .
es una celda vacía.
Suponga que la entrada es válida. Esto significa que está bien formado y que al menos una solución es posible. Todos los rompecabezas válidos son al menos 3x3, y contienen al menos una perla.
Salida
La salida es una cadena de coordenadas que representa la ruta. La esquina superior izquierda de la cuadrícula es 0 0
, superior derecha n-1 0
, donde n es el ancho de la cuadrícula.
Una ruta es simplemente una serie de coordenadas ordenadas:
x1 y1 x2 y2 x3 y3 ...
Se supone que la ruta está cerrada, por lo que no necesita repetir la primera coordenada al final, pero no hay penalización por hacerlo.
La salida debe consistir en al menos todas las esquinas de la ruta. No tiene que generar todas las celdas de la ruta si no hay turno. Por ejemplo, la salida para el ejemplo podría comenzar con:
1 0 5 0 5 1 ...
o
1 0 2 0 3 0 4 0 5 0 5 1 ...
La salida no debe contener ninguna celda que no esté en la ruta. Puede comenzar en cualquier celda del camino.
Retazo
Aquí hay un fragmento que puede usar para visualizar su solución. Simplemente pegue la cuadrícula en la que está trabajando y la ruta de salida. Soy consciente de que es doloroso mirar mi código, así que solo sugiero que no lo hagas;)
Casos de prueba
Estos casos de prueba muestran una salida posible para cada entrada (excepto la última, que se muestra sin resolver). Puede haber otras rutas válidas, puede ir hacia la derecha o hacia la izquierda o comenzar en un punto diferente, etc. Las soluciones deben poder resolver los casos de prueba en segundos / minutos / horas, no días / semanas / eones.
...
w..
..b
0 0 1 0 2 0 2 1 2 2 1 2 0 2 0 1
.wb..b
......
..b...
w.ww..
......
b....b
0 0 2 0 2 2 4 2 4 1 3 1 3 0 5 0 5 5 3 5 3 4 4 4 4 3 1 3 1 4 2 4 2 5 0 5 0 2 1 2 1 1 0 1
.....w.b.w..
ww..b...b...
.w.....b....
...wbww..b.b
....b.......
w.w.........
..w......b.b
.....bb.....
.....b.....w
w.ww..b.....
...w......w.
b..w.....b..