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:
la source
4
s si ceux-ci sont des entrées valides.Réponses:
Je sais que ce défi remonte à plus d'un an, mais je viens de le trouver dans "sans réponse" et il m'a semblé assez intéressant.
En supposant que le numéro de cellule "racine" est le seul significatif dans chaque région (déductible des exemples), voici ma solution de retour en arrière:
Python 3 ,
355351349 octetsEssayez-le en ligne!
Le format d'entrée est une liste 2D d'entiers, vide comme zéro, et le format de sortie est également une liste 2D d'entiers représentant une région par nombre. Le numéro de région commence à un; zéro est réservé aux cellules vides (comme en entrée). Si l'entrée donnée est insoluble, la fonction renvoie un zéro unique (valeur falsifiée).
Par exemple, le scénario de test 5 est entré comme
et la sortie est
Non golfé, avec commentaires:
Essayez-le en ligne!
Remarque: Il s'agit d'un cas particulier de Set Packing qui est réputé être NP-complet. Ce problème spécifique a une taille de jeu limitée (max. 4) et il existe des algorithmes d'approximation pour trouver un "bon" jeu de jeu en temps polynomial, mais ils ne garantissent pas le jeu de jeu maximum possible (ce qui est strictement requis dans ce problème).
la source