Bonjour à tous,
voici un puzzle largement inspiré du jeu Tetravex proposé sur certains systèmes Linux (au moins le mien !), développé par Lars Rydlinge.
Voici une grille de 36 cases contenant quatre chiffres chacune ainsi qu'un caractère alphanumérique d'identification en haut à gauche (pour ceux qui n'arrivent pas à lire, de gauche à droite et de haut en bas se trouvent les 26 lettres de l'alphabet suivis des chiffres de 0 à 9).
Le but est d'échanger les cases de cette grille (sans effectuer de rotation) afin d'obtenir une nouvelle grille, toujours de 6 par 6, de sorte à ce que lorsque deux cases se touchent, leur chiffre en contact soient identiques.
Par exemple, sur la grille originale, on voit que les cases V et 1 respectent cette propriété (9 en contact), de même que les cases G et H (3 en contact) mais ce n'est pas le cas pour les cases A et B car leur chiffre en contact sont différents (6 et 9).
Vous donnerez votre grille-réponse en donnant simplement le caractère d'identification de chaque case, dans l'ordre, de la nouvelle grille. Voici un exemple de réponse (bien évidemment faux) :
8 U Q D W E
5 F 4 3 I O
T 2 S Y L 7
0 B X 9 K 6
M 1 P C V N
J A G H R Z
Si plusieurs réponses sont possibles, une seule suffira.
Bonne chance !
Bonjour,
J'ai tenté à la main,mais rapidement on voit les limites du jeu.
Je vais essayer par les combinaisons.
A mon avis très compliqué.
Bonjour,
je reconnais, pour avoir testé, qu'à la main c'est très difficile. Il y a énormément de possibilités et de maigres indices (quoique je pense qu'avec beaucoup de patience et sans connaître à l'avance la réponse, ça doit être faisable).
En ce cas, pour permettre aux gens de participer sans que ça soit trop casse-tête, je propose, pour ceux qui n'arrivent pas à le résoudre entièrement, cette variante :
Essayez d'insérer le plus de cases possibles dans la grille 6x6 respectant la propriété. Attention, toutes les cases doivent être connectées (c'est-à-dire qu'il ne doit pas y avoir d'îlots).
Je n'ai jamais dépassé 13 cases +quelques appendices....
Si tu connais la solution, il serait bon comme au sudoku de nous positionner
un minimum de cases sures .
Sinon seul un programme déroulant finira pas trouver ....
dpi :
oui, je connais la solution.
Bravo, 13 cases c'est bien.
Je m'abstiendrai pour l'heure de donner des cases sûres car après quelques recherches à la main, je sais qu'on peut, à l'aide de raisonnements logiques, de l'astuce et indépendamment de la connaissance a priori de la réponse, trouver au moins 4 cases certaines (c'est évidemment bien insuffisant pour résoudre toute la grille, mais je me dis qu'on peut en trouver d'autres).
Pour l'heure, j'attends de voir comment les membres réagissent.
Après, il est bien sûr possible de le faire informatiquement, mais l'esprit était plutôt de le faire à la main (ce qui n'enlève pas l'adresse d'un tel programme qui résoudrait correctement ce puzzle ).
veleda :
Bonjour,
A la main je suis arrivé à cela.
Je vais voir avec les blanks où j'ai dérivé.....
Félicitations à vham...
Mon idée de départ vient de l'unicité de 4601 qui impose soit IE soit PE
Ensuite on remarque l'unicité de 9702 qui impose 2 à gauche de I.
Ensuite on teste au mieux...ma dérive vient de 9 au lieu de 0 après K
Aaaaah ma réponse est la même que javatasmanie et vham. Juste transposée. Je me suis trompé dans mes coordonées lors de l'impression du résultat
Bonsoir,
--> Littlefox
j'ai sagement programmé en VB.net
j'aimerais suivre votre programme Python
Quelques commentaires et le cheminement de l'algorithme m'y aiderait surement.
Merci par avance
LittleFox : oui, j'avais remarqué que c'était la solution transposée, je m'étais douté que tu t'en mordrais les doigts.
Compliments pour ton habile programme !
@vham
Je pars d'un grille vide de 6x6 (A) et d'un ensemble de cases à mettre dedans (G).
J'essaie de remplir la grille en partant du coin en haut à gauche puis en suivant des diagonales de façon à avoir le maximum de contraintes le plus tôt possible (getPath()).
subsolve(p) signifie qu'il reste p cases à insérer dans la grille et donc que G ne contient plus que p cases. Pour chacune de ces cases j'essaie de l'insérer au Pème emplacement de getPath (put(A,N,p,c)). Si ça marche j'avance à la case de la grille suivante (appel récursif à subsolve). S'il n'y a plus de case à mettre alors c'est que j'ai trouvé une solution et je l'imprime. Dans tout les cas je reviens en arrière, enlève la case de la grille (reset) et remet la case courante dans l'ensemble des case G. Je fais ainsi jusqu'à avoir testé toutes les possibilités.
Ce programme n'est pas très intelligent, c'est du test et backtracking en essayant de voir que la combinaison est impossible le plus tôt possible.
Bonjour,
Merci Littlefox
J'étais réticent à écrire une fonction récursive qui serait appelée 36 fois,
transposée en VB.net elle donne le résultat encore plus rapidement que le programme que j'ai écrit en premier
Oui, en python non plus les récursions de son pas conseillées : les stackframe sont larges et prennent du temps à être empilée et inversement.
D'ailleurs il y a une limite software en python qui est par défaut à 1000 récursions de profondeur (on peut modifier cette limite).
On en est loin avec nos 36 récursions .
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :