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..
la source
Réponses:
C, 590
640 760 880 963 1018La force brute est assez rapide pour cela. Le test 12x12 s'exécute sous 10 ms. Sachant que cela pourrait opter pour une langue plus appropriée pour le golf.
Je ne suppose pas que le plateau est carré car les puzzles plus gros ont tendance à ne pas être carrés.
La
W
définition définit la limite des dimensions de la carte. La limite réelle est plus petiteW - 2
car j'utilise des lignes supplémentaires pour les bordures pour éviter les vérifications de limites.Testez- moi .
Voici un cas de test plus difficile:
J'ai eu de la chance que mon code trouve la solution assez tôt dans la course (<5min), mais la recherche complète prend beaucoup plus de temps (67min).
la source
Python - 1669
Toujours assez long, mais assez rapide pour exécuter le dernier exemple en moins d'une seconde sur mon ordinateur. Il est probablement possible de raccourcir au prix de la vitesse, mais pour l'instant, il est à peu près équivalent au code non golfé.
Exemple de sortie pour le dernier scénario de test:
Code:
Non golfé:
la source
Lua,
830810765752739729710Fonctionne très bien sur board1 et board2, mais prend du temps à bord3.
Il pourrait économiser 9 octets en générant chaque chemin au lieu du seul premier ...
la source