Skip to content

Notebooks jupyter Résolutions de puzzles et autres problèmes logiques

License

Notifications You must be signed in to change notification settings

YvesLemaire/Jupyter-Puzzles

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

Jupyter-Puzzles

Ce dépôt contient des notebooks jupyter (fichiers d'extension ipynb), avec noyau python ou sage, ayant pour objet la résolution de puzzles, de problèmes logiques, etc.
Si vous clonez tout ou partie du dépôt, veillez à respecter l'arborescence des fichiers.

1 Python

Utilisation d'un noteboook jupyter xxx.ipynb avec un noyau Python

  • Si Python, avec jupyter, est installé sur votre machine, utiliser la commande jupyter notebook dans un répertoire qui contient xxx.ipynb ou ouvrir le fichier dans VScode ;
  • sinon, avec un compte Google, le plus simple est de téléverser les fichiers dans un sous répertoire de Mon Drive/Colab Notebooks/ dans Google Drive et d'ouvrir Mon Drive/Colab Notebooks/.../xxx.ipynb dans un navigateur. Noter que cela permet aussi de faire fonctionner Python sur un smartphone.

1.1 Permutations (permutations.ipynb)

Génération de toutes les permutations d'un ensemble (fini) par un joli algorithme et application à des petites énigmes.

1.2 Parcours de graphe (parcours.ipynb)

Fournit trois fonctions python utilisées par d'autres notebooks

Utilisation du parcours en profondeur d'un graphe pour la résolution de solitaires, par exemple anglais, français ou allemand :

anglais          français          allemand

Utilisation de l'Algorithme A* pour trouver une solution optimale (nombre minimum de déplacements) d'un sokoban de pas trop grande dimension, par exemple, le microcosmos-31 de Aymeric du Peloux:

                  microcosmos31

1.5 8-puzzle (8-puzzle.ipynb)

Utilisation de l'Algorithme A* pour trouver une solution optimale (nombre minimum de déplacements) d'une version simplifiée (8 pièces au lieu de 15) du 15-puzzle

Utilisation de l'Algorithme A* pour trouver une solution optimale

jeu1-0

Application de la notion de cycle hamiltonien d'un graphe à la résolution du problème du cavalier :

         résolution du problème du cavalier

Résolution de nonograms pas trop difficiles et génération d'une suite d'images expliquant cette résolution pas à pas.

Un exemple simple :

tinyWhale

Un autre plus compliqué. et quelques autres

Applications de la théorie des automates à la résolution de problèmes de bouteilles et de de passage de rivière, ainsi que de l'énigme dite des 4 jetons ou du barman aveugle.

1.10 Deux problèmes de logique (logique.ipynb)

choisis parmi les plus beaux (selon moi) problèmes du type "je sais, je sais pas" : le problème de Freudenthal et le problème de Axel Born, Kor Hurkens et Gerhard Woeginger, tous deux référencés ici.

Faire jouer à l'ordinateur le rôle du décodeur dans le jeu Mastermind. L'algorithme utilisé, dû à Donald Knuth, est nommé five-guess car il permet, dans le cas du mastermind classique ($4$ positions et $6$ couleurs), de trouver le code caché en au plus cinq propositions (cinq motifs proposés).
Une autre méthode (D. L. Greenwell) est proposée qui consiste à toujours proposer les 6 motifs suivants (dans 89 % des cas, les 5 premiers suffisent) :

        🔴🟢🟢🔴
        🟢🔵⚫🟡
        🔵🔵🔴🔴
        🟡⚫🟢🟡
        ⚫⚪⚫⚪
        ⚪⚪🟡🔵

Utilisation de la notion de parcours en largeur d'un graphe pour calculer efficacement une solution optimale d'un Rubik's Cube 2x2x2.

Pour être complet, le notebook comprend aussi une interface avec l'excellent solveur de Victor Cabezas qui calcule en un temps très raisonable une solution presque optimale d'un Rubik's Cube classique 3x3x3. Pour l'utiliser : pip install rubik_solver

Calcul des solutions d'un cube serpent :

Cube-Serpent          solutions

1.14 Fonction de Grundy et noyau d'un graphe acyclique (noyau-graphe.ipynb)

Application à quelques jeux impartiaux sans partie nulle : blackjack mathématique, Nim, Marienbad, Wythoff et Euclide.

2 Programmation par contraintes

Programmation par contraintes, Louis-Martin Rousseau et Gilles Pesant constitue une bonne introduction aux algorithmes utilisés en PPC (Programmation Par Contraintes) par les solveurs disponibles dans Python, comme OR-Tools, le solveur de Google .

Implémentation de l'algorithme de Davis–Putnam–Logemann–Loveland (DPLL) de résolution du problème de satisfiabilité d'une FNC.

On applique SAT à la résolution de petits problèmes de PPC comme la résolution du problème du zèbre, de sudokus et du problème des 8 reines.

2.2 Utilisation de cpmpy

Voir la documentation ; en voici un très court résumé.

5 exemples d'applications du module CPMpy dont

Application de la théorie des graphes à la criminologie

Marche du fou :

Marche du fou

Notebook dont l'essentiel est issu de la page github de cpmy.

A lire en parallèle avec l'un des trois notebooks suivants :

Génération d'une suite d'explications pas à pas pour la résolution du problème du zèbre.

Production d'une suite d'images expliquant la résolution case après case d'une grille de sudoku :

résolution case après case

Production d'une suite d'images expliquant la résolution pas à pas d'une grille de mosaïque ou de démineur :

Mosaïque :

g5 g5indic ... g5sol

Démineur :

d6 d6indic ... d6sol

3 Sage

3.1 Utilisation d'un noteboook jupyter xxx.ipynb avec un noyau SageMath

  • si SageMath est installé sur votre machine, utiliser la commande sage -n jupyter dans un répertoire qui contient xxx.ipynb ou ouvrir le fichier dans VScode ;
  • ou vous pouvez ouvrir un compte sage.syzygy.ca ou cocalc.

3.2 Rubik's Cube 3x3x3 (rubikcube.ipynb)

Interface avec les solveurs de Rubik's Cube fournis par Sage (si le package externe rubiks est installé 1) et affichage graphique des solutions:

affichage graphique

Etude d'un Rubik's Snake donné par son code, par exemple 000000220220220102202200 et aide à sa réalisation :

rs

L'algorithme X de Knuth est implémenté efficacement avec la méthode, incluse dans Sage, des liens dansants de Donald Knuth.

Résolution de sudokus et du problème des 8 reines

Puzzles de polyominos :

puzzles de polyominos puzzles de polyominos2

Puzzles de polyhexs :

puzzles de polyhexs puzzles2 de polyhexs

Puzzles de polyiamonds :

puzzles de polyiamonds puzzles2 de polyiamonds

Puzzles de polyiabolos :

tangram pentabolos

Puzzles de polycubes :

puzzles de polycubes puzzles de polycubes

Footnotes

  1. rubiks est pré-installé sur sage.syzygy.ca et cocalc

About

Notebooks jupyter Résolutions de puzzles et autres problèmes logiques

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published