Le jeu
Récemment, une grande partie de mon temps a été occupée par un jeu addictif sur mon téléphone, appelé Logic Dots, qui m'a inspiré pour écrire ce défi. Il est plus facile d'expliquer les règles si je vous montre l'affichage du jeu, voici donc une capture d'écran d'un puzzle non résolu et résolu:
Maintenant, ici, il y a trois choses principales à noter.
- Le plateau de jeu (la grille 4x4 des carrés au centre)
- Les formes requises (les points liés dans la deuxième barre du haut, sous la partition et le menu, etc.), qui sont toutes des lignes, ou
a
par 1 rectangles - Les nombres sur les lignes et les colonnes, qui indiquent combien de points doivent être dans la colonne, pour une solution
L'objectif du jeu est d'adapter les formes requises à la grille. Vous pouvez faire pivoter les formes, mais elles ne peuvent pas entrer en diagonale.
Dans la solution, notez que toutes les formes sont créées exactement une fois (car elles ne sont qu'une fois dans les formes requises), et dans ce cas, elles sont toutes horizontales mais elles peuvent également être verticales. Les carrés roses remplis indiquent les carrés non utilisés.
Voici une grille plus grande et légèrement plus compliquée:
Notez que dans le casse-tête non résolu, il y a déjà quelques carrés remplis Les carrés grisés signifient des carrés bloqués sur lesquels vous NE POUVEZ PAS placer de point. Les points avec une queue vous indiquent qu'un point se trouve à cet endroit et qu'il est lié à au moins un point supplémentaire dans la direction de la queue, mais pas dans aucune autre direction (y compris la direction opposée).
Notation
Pour le reste de cet article, je ferai référence au tableau en utilisant les symboles suivants:
- <,>, ^, v - Signifie un point pré-placé avec une queue s'étendant dans la direction du point
- * - Signifie un point. S'il est donné sur une grille non résolue (entrée), il s'agit d'une forme individuelle. S'il est en sortie, il est connecté aux points qui l'entourent.
- # - Signifie un carré de grille bloqué (où vous ne pouvez pas placer de point)
- -, | (trait d'union et barre) - Signifient respectivement un point avec une queue droite et gauche et un point avec une queue haut et bas
- ** (caractère espace) - ** Signifie un espace vide
En utilisant ces symboles, le dernier exemple de cas (non résolu) peut être représenté comme suit:
<
#
^ #
Et la solution peut être représentée comme:
*< * *
*
*
* *
* *#*
^ # *
Notez que deux formes ne peuvent pas toucher horizontalement, verticalement ou en diagonale , donc le cas suivant n'est pas valide:
***
**
**
Défi
Votre défi est de résoudre n'importe quel puzzle de points logiques, du 4x4 au 9x9 inclus. Vous recevrez quatre lignes d'entrée, puis le plateau de jeu. Les lignes seront les suivantes:
- 1ère ligne, Formes - Les formes à trouver, chacune donnée dans le formulaire
sizexquantity
(par exemple3x2
pour deux formes de longueur trois) et séparées par un espace. Exemple de ligne:3x1 2x1 1x1
- 2e ligne, Colonnes - Une liste séparée par des espaces du nombre de points requis pour chaque colonne. Exemple de ligne:
1 1 2 2
- 3e ligne, lignes - Une liste séparée par des espaces du nombre de points requis pour chaque ligne. Exemple de ligne:
3 0 3 0
- 4ème ligne, taille de la carte - Un seul entier, la taille de la carte,
B
La carte est alors donnée, et est des B
lignes d'entrée représentant la carte en utilisant la notation mentionnée ci-dessus. Par exemple, l'entrée complète pour ce dernier exemple de cas est la suivante:
4x1 3x1 2x2 1x2
1 4 0 3 0 5
4 1 1 2 3 2
6
<
#
^ #
Votre programme sortira ensuite la carte résolue, dans la même notation. La sortie correspondante pour l'entrée ci-dessus est la suivante:
** * *
*
*
* *
* *#*
* # *
Notez qu'un plateau de jeu peut avoir plusieurs solutions. Dans ce cas, sortez simplement une solution valide. De plus, votre programme doit produire une solution correcte dans les 10 secondes sur un ordinateur de bureau raisonnable pour une grille 10x10 compliquée.
C'est le golf de code, donc le moins d'octets gagne.
Cas de test
Entrée 1
3x2 1x4
2 2 3 1 2
4 0 3 0 3
5
#
#
*
Sortie 1
*** *
***#
#
* * *
Entrée 2
3x1 1x6
2 0 4 0 3
3 1 2 1 2
5
*
#
Sortie 2
* * *
*
* *
* #
* *
Entrée 3
5x1 4x1 2x1 1x2
1 2 3 3 2 2
0 5 0 4 0 4
6
#
-
#
<
Sortie 3
#
*****
****
#
* ** *
t no two shapes can touch horizontally, vertically or diagonally
(cela devrait être au début, pas perdu presque vers la fin, mais de toute façon ...)