Ce défi est basé sur le jeu Layerz.
Étant donné, sur stdin ou comme argument de fonction, un tableau rectangulaire 2D de cellules où chaque cellule contient soit un blanc (vous pouvez choisir d'utiliser des 0 au lieu des blancs sans pénalité), un 1, un 2, un 3 ou un 4 ; trouver un moyen de le diviser en régions valides (telles que définies ci-dessous) de sorte que chaque cellule non vide soit contenue par exactement une région. Ensuite, affichez la solution trouvée dans n'importe quel format raisonnable. S'il n'y a pas de solution, soit arrêter sans produire de sortie ou sortir une seule valeur de falsey puis arrêter.
L'un des éléments suivants constitue une région valide:
- Une seule cellule contenant un 1
- Une cellule contenant un 2 et exactement l'un de ses voisins orthogonaux non vides
- Une cellule contenant un 3 et exactement deux de ses voisins orthogonaux non vides
- Une cellule contenant un 4 et exactement trois de ses voisins orthogonaux non vides
Il s'agit de code-golf , donc la réponse valide la plus courte, en octets, l'emporte.
Quelques cas de test:
1. Une question plutôt banale:
Et c'est la solution, avec chaque région dans une couleur différente:
2. Un plus intéressant
Celui-ci a plus d'une solution, mais en voici une:
3. Un plus petit, contenant des blancs, qui n'a pas de solutions (selon que vous utilisez l'un des deux pour "capturer" les trois, ou les trois pour prendre deux des deux, vous vous retrouvez avec un paire de deux non adjacents [et donc non groupables] ou un seul deux par lui-même):
Étant donné que cette grille n'a pas de solutions, votre programme doit s'arrêter sans produire aucune sortie lorsque cette grille est donnée.
4. Celui-ci (avec les 2 premiers décalés d'une cellule vers la gauche) a cependant une solution:
Solution:
(Le 2 en bas à droite est utilisé pour "capturer" le 3)
5. Parce que nous avions besoin d'un cas de test à quatre pattes:
Une solution:
4
s si ceux-ci sont des entrées valides.