introduction
Les règles du puzzle:
Le puzzle Binary (également connu sous le nom de Takuzu ou Subiku) est très simple à comprendre et n'a que quelques règles:
puisque le nom du jeu est binaire, c'est assez évident, mais vous ne pouvez remplir que des zéros et des uns.
- Pas plus de deux du même chiffre peuvent être adjacents verticalement ou horizontalement
- Chaque ligne et chaque colonne doit contenir une quantité égale de zéros et de uns (cela signifie implicitement que chaque jeu binaire aura toujours des dimensions égales).
- Il peut ne pas y avoir de lignes et de colonnes dupliquées (avec exactement le même ordre de zéros et de uns).
Vous pouvez jouer au jeu sur www.binarypuzzle.com si vous le souhaitez.
Tactique:
En raison de la règle 1, nous pouvons toujours remplir un chiffre si:
- Il y a déjà deux du même chiffre verticalement ou horizontalement adjacents, auquel cas nous pouvons remplir le chiffre opposé des deux côtés. C'est à dire .11...
→ 0110..
.
- Il y a deux du même chiffre verticalement ou horizontalement avec un seul espace entre eux. C'est à dire .1.1..
→.101..
En raison de la règle 1, lorsque trois espaces sont laissés et que nous ne pouvons pas avoir trois adjacents du même chiffre, nous pouvons remplir l'un des espaces. Ie .0.1.0
→ 10.1.0
(Nous devons encore en remplir deux, et nous ne pouvons pas en avoir trois adjacents au milieu, donc le premier écart doit être a 1
.)
En raison de la règle 2, nous pouvons toujours combler les lacunes restantes dans une ligne ou une colonne si la moitié d'entre elles est déjà remplie avec le chiffre opposé. C'est à dire .1.011
→010011
En raison de la règle 3, nous pouvons toujours remplir les chiffres opposés s'il ne reste que deux à résoudre sur une ligne également ordonnée. C'est à dire 101100 & 1..100
→101100 & 110100
En raison de la règle 3, nous pouvons parfois combler un espace lorsque trois espaces sont laissés sur une ligne également ordonnée. C'est-à-dire 010011 & .1.01.
→ 010011 & .1.010
(Ici, nous ne pouvons pas remplir un 1
à la fin, car cela signifierait que nous devons remplir des zéros aux deux autres espaces, ce qui rend les deux lignes égales dans l'ordre.)
Exemple:
Nous commençons avec la grille 6x6 suivante avec des uns et des zéros remplis (et les points sont des lacunes que nous devons encore remplir):
.1....
.10.0.
1.11..
.1....
...1.0
......
En raison des règles 1 et 2, nous pouvons remplir ces chiffres:
.1.01.
.1010.
101100
010011
.0.1.0
.010..
En raison de la règle 1, nous pouvons remplir un 1 à la ligne 5, colonne 1:
.1.01.
.1010.
101100
010011
10.1.0
.010..
En raison de la règle 3, nous pouvons remplir un 0 à la ligne 1, colonne 6 (en regardant la ligne 4):
.1.010
.1010.
101100
010011
10.1.0
.010..
Maintenant, nous pouvons continuer à combler les lacunes avec des chiffres en raison des règles 1 et 2:
.1.010
010101
101100
010011
10.1.0
.010.1
Maintenant, nous pouvons terminer la ligne 5 en raison de la règle 3 (en regardant la ligne 3):
.1.010
010101
101100
010011
100110
.010.1
Et puis nous pouvons terminer le puzzle en raison des règles 1 et 2:
011010
010101
101100
010011
100110
101001
Défi:
Le défi est simple: compte tenu de la grille de départ, sortez le puzzle résolu.
REMARQUE: vous n'avez pas à implémenter les règles ci-dessus. Bien sûr, vous pouvez, et cela devrait vous donner des conseils sur la façon de mettre en œuvre ce défi, mais le renforcement de la solution avec les règles en tête est tout à fait correct.
La façon dont vous le résolvez dépend de vous, mais le défi consiste à produire le puzzle résolu.
Règles du défi:
- Le format d'entrée et de sortie de la grille est flexible, mais veuillez indiquer ce que vous utilisez. (C'est-à-dire un tableau d'octets 2D; Chaîne avec des retours à la ligne; etc.)
- Ceci ci-dessus s'applique également aux caractères utilisés. Dans l'exemple que j'ai utilisé
01.
, mais si vous le souhaitez, vous pouvez utiliser à laABx
place. Veuillez indiquer le format d'entrée / sortie et les caractères que vous avez utilisés. - Vous pouvez supposer que seules les tailles de grille suivantes seront utilisées
6x6
:;8x8
;10x10
;12x12
;14x14
;16x16
.
Règles générales:
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues non-golfeur de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation. - Des règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, des fonctions / méthodes avec les paramètres appropriés, des programmes complets. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code.
- Veuillez également ajouter une explication si nécessaire.
Cas de test:
Les points ne sont ajoutés que pour la lisibilité, n'hésitez pas à utiliser des espaces ou tout ce que vous préférez pour les espaces à la place. Le format de sortie et de sortie est flexible.
Input:
1..0..
..00.1
.00..1
......
00.1..
.1..00
Output:
101010
010011
100101
011010
001101
110100
Input:
.1....
.10.0.
1.11..
.1....
...1.0
......
Output:
011010
010101
101100
010011
100110
101001
Input:
.......1..
.00..0..1.
.0..1..0.0
..1...1...
1.1......1
.......1..
.0..1...0.
....11...0
.0.0..1..0
0...0...1.
Output:
0110010101
1001100110
1001101010
0110011001
1010100101
0101010110
1001101001
0110110100
1010011010
0101001011