Aperçu
Pearls (ou Masyu) est un jeu de logique joué sur une grille. Il y a des perles noires et blanches placées sur la grille. L'objectif est de former une boucle fermée unique qui parcourt chaque perle en utilisant uniquement des segments de ligne droite et des angles droits.
Il existe certaines règles qui régissent la façon dont la boucle interagit avec les perles:
- Les perles blanches doivent être traversées directement , mais la boucle doit tourner dans la cellule précédente et / ou suivante sur son chemin.
- Les perles noires doivent être activées , mais la boucle doit traverser directement les cellules suivantes et précédentes sur son chemin.
- La boucle ne doit pas se croiser ou se recouper d'une autre manière. Toutes les cellules ont exactement zéro ou deux entrées / sorties de boucle.
Un exemple de puzzle de Wikipedia (et sa solution):
Votre objectif est de résoudre un puzzle donné. S'il existe plusieurs solutions possibles, peu importe celle que vous proposez.
Contribution
L'entrée sera une grille carrée non résolue . L'exemple ci-dessus ressemblerait à ceci:
..w.w.....
....w...b.
..b.b.w...
...w..w...
b....w...w
..w....w..
..b...w...
w...b....w
......ww..
..b......b
w
est une perle blanche, b
est une perle noire et .
est une cellule vide.
Supposons que l'entrée est valide. Cela signifie qu'il est bien formé et qu'au moins une solution est possible. Tous les puzzles valides sont au moins 3x3 et contiennent au moins une perle.
Production
La sortie est une chaîne de coordonnées représentant le chemin. Le coin supérieur gauche de la grille est 0 0
, en haut à droite est n-1 0
, où n est la largeur de la grille.
Un chemin est simplement une série de coordonnées ordonnées:
x1 y1 x2 y2 x3 y3 ...
Le chemin est supposé fermé, vous n'avez donc pas besoin de répéter la première coordonnée à la fin, mais il n'y a aucune pénalité pour cela.
La sortie doit comprendre au moins tous les coins du chemin. Il n'est pas nécessaire de sortir chaque cellule du chemin s'il n'y a pas de tour. Par exemple, la sortie de l'exemple pourrait commencer par:
1 0 5 0 5 1 ...
ou
1 0 2 0 3 0 4 0 5 0 5 1 ...
La sortie ne doit contenir aucune cellule ne se trouvant pas dans le chemin. Vous pouvez commencer à n'importe quelle cellule du chemin.
Fragment
Voici un extrait que vous pouvez utiliser pour visualiser votre solution. Collez simplement la grille sur laquelle vous travaillez et le chemin que vous sortez. Je suis conscient que c'est pénible de regarder mon code, je vous suggère donc de ne pas le faire;)
Cas de test
Ces cas de test montrent une sortie possible pour chaque entrée (sauf la dernière, qui est montrée non résolue). Il peut y avoir d'autres chemins valides, vous pouvez aller CW ou CCW ou commencer à un point différent, etc. Les solutions devraient être capables de résoudre les cas de test en secondes / minutes / heures, pas jours / semaines / éons.
...
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..