Défi:
Étant donné une carte Sudoku sur l'entrée standard, trouvez le nombre minimum de numéros ajoutés pour rendre la carte unique.
Détails / règles:
L'entrée est formatée comme suit (tous les espaces sont significatifs)
516|827|943 278|394|615 349|615|872 ---+---+--- 98 |4 2|156 465|189|237 12 |5 6|489 ---+---+--- 892|743|561 634|951|728 751|268|394
La sortie est formatée avec un nombre par ligne, formatée comme
(x,y):z
- x et y commencent par un en haut à gauche et augmentent vers le bas et la droite; z est le nombre à ajouter.- Dans ce cas , ceux - ci seraient tous sorties valides:
(3,4):3
,(3,4):7
,(5,4):3
,(5,4):7
,(3,6):3
,(3,6):7
,(5,6):3
et(5,6):7
, comme l'un de ces permettrait au conseil d' administration à résoudre.
- Dans ce cas , ceux - ci seraient tous sorties valides:
- Si une carte Sudoku unique / résolue est entrée, le programme ne devrait rien imprimer, même une nouvelle ligne.
- Le programme devrait fonctionner en moins d'une heure pour n'importe quelle carte (je suggère de tester en utilisant une carte entièrement vierge ou une carte avec un nombre aléatoire dessus).
Notation:
- Prenez votre taille totale (golfée) de code en caractères, y compris tous les espaces ...
Bonus:
1/2 taille de code : si le programme imprime un seul point d'exclamation et s'arrête après avoir une carte sans aucune solution saisie
1/2 taille de code : si le programme imprime deux points d'exclamation et s'arrête après avoir entré une carte avec une contradiction interne (deux chiffres identiques sur la même ligne / colonne / carré).
Réponses:
Brachylog , 245 octets / 2 = 122,5
(Notez que vous devez utiliser la version du langage à partir de ce commit . Ce code aurait besoin de quelques légères modifications pour qu'il fonctionne correctement dans les versions suivantes de Brachylog)
Cela s'imprime
"!!"
si la carte donnée présente des contradictions internes (cela prend cependant quelques secondes dans ce cas sur TIO, alors soyez patient).Je ne suis pas sûr de bien comprendre le premier bonus donc je ne m'y attends pas.
Ce n'est évidemment pas compétitif car la langue est beaucoup plus récente que le challenge, mais comme il n'y a pas d'autres réponses, je ne suis pas sûr que cela compte beaucoup…
Explication
Prédicat principal:
Prédicat 1: supprimez tous les "
|
" sur les lignes, transformez-les---+---+---
en-
pour les supprimer aprèsPrédicat 2: convertissez un caractère en entier ou, s'il est vide, en variable entre 1 et 9.
Prédicat 3: Imposer que toutes les valeurs de la liste d'entrée de cellules doivent être distinctes
Prédicat 4: appliquer la contrainte de distinction aux valeurs dans des blocs 3 * 3
Prédicat 5:
Prédicat 6: Attribuez des valeurs satisfaisant les contraintes à un sous-ensemble des cellules vides, puis avec ces valeurs, il n'y a qu'une seule solution pour la carte.
Prédicat 7: Transforme le tableau de telle sorte que chaque cellule est désormais
[V:X:Y]
au lieu de seulementV
(la valeur).Prédicat 8: Transforme une ligne telle que chaque cellule se trouve maintenant
[V:X]
.Prédicat 9: récupérer les valeurs des cellules
Prédicat 10: ajouter la longueur d'un sous-ensemble au début de celui-ci
Prédicat 11: imprimer une cellule
la source