Fillomino est un puzzle où vous remplissez une grille de polyominos . Chaque polyomino est une zone de cellules contiguës. La représentation de la grille montre quelle taille polyomino recouvre chaque cellule. Par exemple, un pentomino (5) serait représenté comme 5
dans chacune des cinq cellules contiguës (voir ci-dessous). Deux polyominos de même taille ne peuvent pas partager une frontière, mais peuvent être bordés en diagonale.
Pour chaque puzzle, vous commencez avec un certain nombre de données et devez remplir les cellules restantes. Un exemple simple de puzzle et de solution:
Votre tâche: étant donné un puzzle carré, résolvez-le et sortez la réponse. L'entrée peut se faire via stdin, un seul argument de ligne de commande ou un fichier texte. L'entrée sera donnée sous forme d'entier n
, suivie de n
lignes de n
chiffres chacune. Les cellules vides seront données sous forme de points ( .
). Pour l'exemple de puzzle ci-dessus, ce serait:
5
3..66
5.4.6
.54.6
.1.6.
..312
La sortie est le puzzle résolu, donné sur des n
lignes de n
chiffres, à la console ou au fichier texte:
33366
55446
55466
51462
33312
Si le puzzle n'est pas valide, sortez 0
. Un casse-tête peut être invalide si l'entrée est mal formée ou s'il n'y a pas de solution. S'il existe plusieurs solutions, vous pouvez en générer une ou toutes.
Étant donné que chaque cellule est représentée par un seul chiffre, tous les puzzles seront constitués de taille de polyominos 9
et inférieurs uniquement. S'il n'est pas possible de résoudre sans polyominos plus gros, considérez-le comme invalide.
Des réponses valides résoudront n'importe quel casse-tête donné, pas seulement des solutions de sortie pour les cas de test. Pas de ressources externes, que ce soit en ligne ou local. S'il se trouve qu'il existe un langage avec une fonction de résolution de fillomino intégrée, vous ne pouvez pas l'utiliser. Bref, jouez juste .
Cas de test:
Contribution:
9
..21.3..5
.5...5..5
.1.44.334
...53.4..
2.3.3..5.
1.15.5.15
..45..1..
.24.53.53
....2....
Sortie (une solution possible):
322133315
355445555
315443334
235531444
233135551
141535515
344553155
324553553
321223133
Rappelez-vous que certains polyominos n'ont pas de numéro donné et certains en ont plus d'un. Il n'y a pas de relation biunivoque entre le nombre de données et le nombre de polyominos.
Le score est un code-golf standard, la taille du programme en octets.
la source
Réponses:
4882 caractères - Java
Pas une solution très golfée (c.-à-d. 4800 caractères est un lotttttttttttt) Pourrait être joué un peu plus dans la mesure où 1 ou 2 lignes d'impression de débogage sont toujours là. Je pense que je peux réduire encore un peu en termes de code inutile / optimisé.
N'ayant jamais vu de polyominos avant cela, j'ai lu ce qu'ils sont et sans chercher à résoudre des alrogithmes, je viens de les inventer (assez lentement).
Fondamentalement, utilise beaucoup la récursivité ... Trouve un Polyomino incomplet, essaie de le terminer. Trouve un espace vide, Boucles 1-9 à travers tous les carrés de la poche, définit cette poche à cette valeur. Si la poche est complète, il essaie de trouver une autre poche, puis se répète jusqu'à la fin. Je ne pouvais pas le faire fonctionner pour une grille de taille 9 ... J'ai au moins une optimisation en tête qui pourrait le faire fonctionner dans un délai raisonnable pour 9. Je pourrais essayer de mettre cela en place bientôt.
la source