Un méandre remplissant une grille est un chemin fermé qui visite chaque cellule d'une grille carrée au moins une fois, ne traversant jamais aucun bord entre des cellules adjacentes plus d'une fois et ne se croisant jamais. Par exemple:
Une fois remplie, chaque cellule de la grille peut être représentée par l'une des 8 tuiles suivantes:
Numérotées de cette façon, les tuiles du méandre ci-dessus peuvent être représentées par cette matrice:
5 6 5 6
4 8 3 2
5 7 6 2
4 3 4 3
Votre tâche consiste à terminer un méandre remplissant la grille étant donné un ensemble incomplet de tuiles. Par exemple, le méandre incomplet:
... qui peut être représenté à l'aide de 0
s pour les tuiles manquantes:
5 0 0 0 6
0 0 7 0 0
0 0 0 0 3
2 4 0 0 0
0 0 3 0 0
... pourrait être complété comme ceci:
...c'est à dire:
5 6 5 1 6
4 8 7 6 2
5 7 7 7 3
2 4 8 8 6
4 1 3 4 3
Caractéristiques
- L'entrée aura toujours au moins et au plus tuiles (non vides), où .
- Vous pouvez utiliser n'importe quel ensemble de valeurs pour représenter les tuiles, tant qu'il est spécifié dans votre réponse.
- Vos entrées et sorties peuvent être dans n'importe quel format et ordre, tant qu'elles sont spécifiées dans votre réponse.
- Au moins une solution valide existera pour toutes les entrées (c'est-à-dire que vous n'avez pas besoin de gérer les entrées non valides).
- Les règles d'E / S standard s'appliquent.
- Les failles standard sont interdites.
- Des explications, même pour les langues "pratiques", sont encouragées.
Cas de test
Entrée ( Θ ):
0 6 0 0
Sortie ( Θ ):
5 6 4 3
Entrée ( Θ ):
5 6 5 6 4 0 3 2 5 7 6 2 4 3 4 3
Sortie ( Θ ):
5 6 5 6 4 8 3 2 5 7 6 2 4 3 4 3
Entrée ( Θ ):
5 0 0 0 6 0 0 7 0 0 0 0 0 0 3 2 4 0 0 0 0 0 3 0 0
Sortie ( Θ ):
5 6 5 1 6 4 8 7 6 2 5 7 7 7 3 2 4 8 8 6 4 1 3 4 3
la source
Réponses:
JavaScript (ES7),
236 ... 193185 octetsSorties en modifiant la matrice d'entrée.
Essayez-le en ligne!
(comprend un code de post-traitement pour imprimer le résultat à la fois sous forme de matrice et de liste plate compatible avec l' outil de visualisation fourni par l'OP)
Résultats
Comment?
Variables
Vérifications initiales
Pour l'instant, supposons que nous ne sommes pas revenus au point de départ.
À la recherche d'un chemin
Les 8 dernières entrées sont invalides et omises. Les 4 autres entrées invalides sont explicitement marquées par des tirets.
Pour référence, voici le tableau décodé, la boussole et le jeu de tuiles fournis dans le défi:
Validation du chemin
D'où le code JS:
Source formatée
la source