Panoramica
Pearls (o Masyu) è un gioco di logica giocato su una griglia. Ci sono perle bianche e nere poste sulla griglia. L'obiettivo è formare un singolo anello chiuso che attraversa ogni perla usando solo segmenti di linea retta e angoli retti.
Ci sono alcune regole che regolano il modo in cui il ciclo interagisce con le perle:
- Le perle bianche devono essere attraversate direttamente , ma il ciclo deve girare nella cella precedente e / o successiva nel suo percorso.
- Le perle nere devono essere accese , ma il ciclo deve viaggiare dritto attraverso le celle successive e precedenti nel suo percorso.
- Il loop non deve incrociarsi o intersecarsi in altro modo. Tutte le celle hanno esattamente zero o due ingressi / uscite di loop.
Un puzzle di esempio da Wikipedia (e la sua soluzione):
Il tuo obiettivo è risolvere un determinato puzzle. Se ci sono più soluzioni possibili, non importa quale date.
Ingresso
L'input sarà una griglia quadrata non risolta. L'esempio mostrato sopra sarebbe simile al seguente:
..w.w.....
....w...b.
..b.b.w...
...w..w...
b....w...w
..w....w..
..b...w...
w...b....w
......ww..
..b......b
w
è una perla bianca, b
è una perla nera ed .
è una cella vuota.
Supponiamo che l'input sia valido. Ciò significa che è ben formato e almeno una soluzione è possibile. Tutti i puzzle validi sono almeno 3x3 e contengono almeno una perla.
Produzione
L'output è una stringa di coordinate che rappresenta il percorso. L'angolo in alto a sinistra della griglia è 0 0
, in alto a destra è n-1 0
, dove n è la larghezza della griglia.
Un percorso è semplicemente una serie di coordinate ordinate:
x1 y1 x2 y2 x3 y3 ...
Si presume che il percorso sia chiuso, quindi non è necessario ripetere la prima coordinata alla fine, ma non ci sono penalità per farlo.
L'output dovrebbe essere costituito almeno da tutti gli angoli del percorso. Non è necessario eseguire l'output di tutte le celle sul percorso se non è presente alcun turno. Ad esempio, l'output dell'esempio potrebbe iniziare con:
1 0 5 0 5 1 ...
o
1 0 2 0 3 0 4 0 5 0 5 1 ...
L'output non deve contenere celle non presenti nel percorso. Puoi iniziare da qualsiasi cella del percorso.
Frammento
Ecco uno snippet che puoi utilizzare per visualizzare la tua soluzione. Basta incollare la griglia su cui stai lavorando e il percorso che hai emesso. Sono consapevole che è doloroso guardare il mio codice, quindi suggerisco solo di non farlo;)
Casi test
Questi casi di test mostrano un possibile output per ciascun input (tranne l'ultimo, che viene mostrato non risolto). Potrebbero esserci altri percorsi validi, potresti andare in senso orario o antiorario o iniziare in un punto diverso, ecc. Le soluzioni dovrebbero essere in grado di risolvere i casi di test in secondi / minuti / ore, non giorni / settimane / eoni.
...
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..