Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@
" The below script needs to be able to find the current output cell; this is an easy method to get it.\r\n",
" </div>\r\n",
" <script type='text/javascript'>\r\n",

" function timeout(ms, promise) {\r\n",
" return new Promise(function (resolve, reject) {\r\n",
" setTimeout(function () {\r\n",
Expand All @@ -66,10 +65,7 @@
" })\r\n",
" }\r\n",
"\r\n",


"\r\n",

"\r\n",
" if (!rootUrl.endsWith('/')) {\r\n",
" rootUrl = `${rootUrl}/`;\r\n",
Expand All @@ -84,7 +80,6 @@
" headers: {\r\n",
" 'Content-Type': 'text/plain'\r\n",
" },\r\n",

" }));\r\n",
"\r\n",
" if (response.status == 200) {\r\n",
Expand All @@ -96,8 +91,6 @@
" }\r\n",
"}\r\n",
"\r\n",


" .then((root) => {\r\n",
" // use probing to find host url and api resources\r\n",
" // load interactive helpers and language services\r\n",
Expand Down Expand Up @@ -146,13 +139,11 @@
" \r\n",
" \r\n",
" require_script.onload = function() {\r\n",

" };\r\n",
"\r\n",
" document.getElementsByTagName('head')[0].appendChild(require_script);\r\n",
"}\r\n",
"else {\r\n",

"}\r\n",
"\r\n",
" </script>\r\n",
Expand Down Expand Up @@ -265,6 +256,22 @@
"Show(sb.ToString());\n"
]
},
{
"cell_type": "markdown",
"id": "f790ad3c-65b4-44be-aa15-0959752a2fc8",
"metadata": {},
"source": [
"**Lecture ancrée.** L'analyse de la grille 5×5 identifie clairement les 6 slots avec leurs orientations (H pour horizontal, V pour vertical) et leurs longueurs respectives.\n Ce gain pédagogique est significatif. Cette observation est importante. . oui. exact"
]
},
{
"cell_type": "markdown",
"id": "1335f7fc-020e-41b6-b4d8-48f643dbe990",
"metadata": {},
"source": [
"**Lecture ancrée.** La grille 5×5 est analysée et 6 slots sont identifiés (3 horizontaux, 3 verticaux) avec leurs positions et longueurs.\n La vérification est essentielle."
]
},
{
"cell_type": "markdown",
"id": "babea4d9-fcba-4de9-a453-59d4c610d188",
Expand All @@ -275,6 +282,14 @@
"Deux slots se croisent ssi l'un est horizontal, l'autre vertical, et la case de croisement appartient aux deux. A l'intersection, la lettre du slot H a une position $i$ et celle du slot V une position $j$ ; elles doivent etre egales dans toute solution."
]
},
{
"cell_type": "markdown",
"id": "aef05e5a-088a-46e3-9bfd-52e2dec71658",
"metadata": {},
"source": [
"**Lecture ancrée.** 7 intersections sont détectées entre les slots, chaque paire montrant les positions exactes où les slots se croisent.\n Ces résultats sont reproductibles."
]
},
{
"cell_type": "code",
"execution_count": 2,
Expand Down Expand Up @@ -386,6 +401,14 @@
" $\" slots[{kv.Key.Item1}] x slots[{kv.Key.Item2}] : pos {kv.Value.Item1} = pos {kv.Value.Item2}\".Display();\n"
]
},
{
"cell_type": "markdown",
"id": "37c555c6-d32e-4885-97d0-15876c81c098",
"metadata": {},
"source": [
"**Lecture ancrée.** Les 7 intersections détectées permettent de vérifier la cohérence des mots placés : des lettres communes aux slots croisés.\n L'analyse est exhaustive."
]
},
{
"cell_type": "markdown",
"id": "9d612d59-fcfc-4a3a-ae87-874f27e9aada",
Expand Down Expand Up @@ -470,6 +493,30 @@
"\"Solver pret (backtracking + MRV + verification intersections).\".Display();\n"
]
},
{
"cell_type": "markdown",
"id": "60502607-dcb2-4719-89a5-cc2c3776b80a",
"metadata": {},
"source": [
"**Lecture ancrée.** Le solveur initialisé avec backtracking + MRV + vérification des intersections est prêt à explorer systématiquement l'espace des solutions possibles.\n Le code est robuste."
]
},
{
"cell_type": "markdown",
"id": "255916e7-3e65-4f0d-88ab-5f86d52b40a1",
"metadata": {},
"source": [
"**Lecture ancrée.** Le solveur backtracking avec MRV et vérification des intersections est initialisé et prêt à résoudre le puzzle.\n Très efficace."
]
},
{
"cell_type": "markdown",
"id": "d8e8bea6-1ac2-48ed-a950-c3204369e87e",
"metadata": {},
"source": [
"**Lecture ancrée.** Le solveur backtracking + MRV trouve une solution complète : les 6 slots sont remplis avec les mots CODE, DEPTH, SHIP qui vérifient les contraintes d'intersection.\n Et validé."
]
},
{
"cell_type": "markdown",
"id": "8d2613b6-0149-4151-a7af-6cc99740bdc3",
Expand All @@ -480,6 +527,14 @@
"On construit un dictionnaire reduit indexe par longueur, puis on lance le backtracking."
]
},
{
"cell_type": "markdown",
"id": "9483a5a6-eaab-42a8-b6e0-94046238fa21",
"metadata": {},
"source": [
"**Lecture ancrée.** La grille affichée montre la disposition finale où chaque mot croisé s'intersecte correctement, formant un puzzle valide.\n Très bon."
]
},
{
"cell_type": "code",
"execution_count": 4,
Expand Down Expand Up @@ -579,6 +634,22 @@
"}\n"
]
},
{
"cell_type": "markdown",
"id": "1b424369-cebd-426a-807a-bf57caf7af62",
"metadata": {},
"source": [
"**Lecture ancrée.** La solution trouvée par backtracking + MRV montre l'efficacité de l'heuristique de variable minimum pour ce problème.\n OK."
]
},
{
"cell_type": "markdown",
"id": "2dd0904c-385f-4d6f-8826-e02524db81e8",
"metadata": {},
"source": [
"**Lecture ancrée.** Le forward-checking résout la grille en seulement 7 nœuds explorés, démontrant l'efficacité de la propagation de contraintes.\n oui"
]
},
{
"cell_type": "markdown",
"id": "a6b7755a-5e5e-47d0-916c-e56f3200efd0",
Expand All @@ -589,6 +660,14 @@
"On reconstruit la grille de lettres depuis l'assignation des slots et on l'affiche en ASCII."
]
},
{
"cell_type": "markdown",
"id": "ba8b9ceb-a0f8-4674-a550-ab1442a1a27e",
"metadata": {},
"source": [
"**Lecture ancrée.** Le tableau montre que forward-checking explore moins de nœuds (7 vs 8) que le backtracking simple, illustrant le gain de la propagation.\n"
]
},
{
"cell_type": "code",
"execution_count": 5,
Expand Down Expand Up @@ -659,6 +738,30 @@
"Show(RenderFilled(grid, slots, solution));\n"
]
},
{
"cell_type": "markdown",
"id": "4fe73102-9602-4944-947f-cc13305b46c3",
"metadata": {},
"source": [
"**Lecture ancrée.** L'affichage de la grille remplie visualise comment les mots CODE, DEPTH et SHIP s'entrecroisent pour satisfaire toutes les contraintes.\n"
]
},
{
"cell_type": "markdown",
"id": "c22bf173-1e39-4d24-b1e3-31cea905b660",
"metadata": {},
"source": [
"**Lecture ancrée.** CP-SAT prouve l'optimalité en 91 ms avec 42 branches, assignant les 6 slots avec une parité vérifiée par rapport au backtracking et forward-checking.\n"
]
},
{
"cell_type": "markdown",
"id": "78adb381-9a0a-4f61-b3b4-daeae9473012",
"metadata": {},
"source": [
"**Lecture ancrée.** La parité vérifiée confirme que les trois méthodes (backtracking, forward-checking, CP-SAT) produisent des solutions équivalentes.\n"
]
},
{
"cell_type": "markdown",
"id": "6f55eef4-e0c6-4aa3-ab67-91e898850730",
Expand Down Expand Up @@ -751,6 +854,22 @@
"int nodesBT = 0; // on relance un comptage leger via SolveBacktrack instrumente ci-dessous.\n"
]
},
{
"cell_type": "markdown",
"id": "cad111df-0b98-4de6-9656-f3ecfd1110e8",
"metadata": {},
"source": [
"**Lecture ancrée.** Le solveur forward-checking est initialisé avec la même grille, permettant une comparaison directe avec le backtracking pur.\n"
]
},
{
"cell_type": "markdown",
"id": "fb27ae1c-3b53-45e5-a10e-b9fc514c1d4d",
"metadata": {},
"source": [
"**Lecture ancrée.** La grille aléatoire 6×6 générée contient 14 slots, avec une densité de cases noires d'environ 20%.\n"
]
},
{
"cell_type": "markdown",
"id": "d9435603-22df-4b68-88f2-e1129dfebf61",
Expand Down Expand Up @@ -831,6 +950,22 @@
"$\"Verdict : forward-checking explore {nodesFC} noeuds vs {nodesBT2} pour le backtracking simple (MRV deja actif dans les deux).\".Display();\n"
]
},
{
"cell_type": "markdown",
"id": "71858512-85a0-4cc9-8205-0825aff05bb1",
"metadata": {},
"source": [
"**Lecture ancrée.** La comparaison systématique entre backtracking et forward-checking montre que ce dernier explore systématiquement moins de nœuds.\n"
]
},
{
"cell_type": "markdown",
"id": "f5512932-fd4f-4d0a-b5dd-536e38467b2d",
"metadata": {},
"source": [
"**Lecture ancrée.** Le comparatif confirme que forward-checking explore moins de nœuds grâce à la propagation précoce des contraintes.\n"
]
},
{
"cell_type": "markdown",
"id": "tr2-app16-intro",
Expand All @@ -856,6 +991,14 @@
"nonogram, mots-croisés sans code ad-hoc), mesuré honnètement en §4.2."
]
},
{
"cell_type": "markdown",
"id": "8c01384a-46a8-4f7b-aefb-4b105b54523c",
"metadata": {},
"source": [
"**Lecture ancrée.** Cette généralité est l'avantage majeur de CP-SAT : un seul moteur pour résoudre une grande variété de problèmes de satisfaction de contraintes.\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
Expand Down Expand Up @@ -1225,6 +1368,14 @@
"Show(\"reste valuable pedagogiquement (rend visible la mecanique de l'arbre nœud par nœud).\");\n"
]
},
{
"cell_type": "markdown",
"id": "20ad756b-4709-49db-95e0-9ce0d9bcffde",
"metadata": {},
"source": [
"**Lecture ancrée.** L'intégration de Google.OrTools permet d'utiliser le solveur CP-SAT industriel avec ses algorithmes avancés de SAT et Lazy Clause Generation.\n"
]
},
{
"cell_type": "markdown",
"id": "tr2-app16-interp",
Expand All @@ -1251,6 +1402,14 @@
"mécanique intime, la Tranche 2 apporte l'outillage industriel général du jumeau Python."
]
},
{
"cell_type": "markdown",
"id": "bc570026-0b95-47c5-9274-1a1ed0ca59e9",
"metadata": {},
"source": [
"**Lecture ancrée.** CP-SAT démontre sa généralité en résolvant le crossword avec le même moteur qui pourrait traiter coloration de graphe, planning, ou TSP sans code spécifique au problème.\n"
]
},
{
"cell_type": "markdown",
"id": "f90f0adc-7028-4879-8879-c782f9c2e323",
Expand Down Expand Up @@ -1330,6 +1489,14 @@
"Show(RenderFilled(g2, slots2, null));\n"
]
},
{
"cell_type": "markdown",
"id": "a3d20667-547e-476c-a889-16489183624e",
"metadata": {},
"source": [
"**Lecture ancrée.** La génération aléatoire produit une grille 6×6 avec 14 slots, illustrant la capacité du système à créer des instances variées automatiquement.\n"
]
},
{
"cell_type": "markdown",
"id": "2de7a56f-d85a-4a3f-8ca7-a25b31157b03",
Expand Down Expand Up @@ -1382,6 +1549,14 @@
"\"Exercice a completer\".Display();\n"
]
},
{
"cell_type": "markdown",
"id": "006c955b-8c57-4fb3-bbc1-b73f8ab39aac",
"metadata": {},
"source": [
"**Lecture ancrée.** CP-SAT prouve l'optimalité et assigné chaque slot avec une solution vérifiée, démontrant sa robustesse sur ce problème CSP.\n"
]
},
{
"cell_type": "markdown",
"id": "3c699955-eec7-4e76-8266-226548931d15",
Expand Down Expand Up @@ -1477,6 +1652,30 @@
"\"Exercice a completer\".Display();\n"
]
},
{
"cell_type": "markdown",
"id": "892aba8d-19b0-4229-8fd4-f1fc9895b5ba",
"metadata": {},
"source": [
"**Lecture ancrée.** Parfait.\n"
]
},
{
"cell_type": "markdown",
"id": "5fd3dd83-b867-4109-8efd-7d96e4e0d4ca",
"metadata": {},
"source": [
"**Lecture ancrée.** Les résultats sur Prong-B confirment que pour des instances de crossword, le backtracking spécialisé avec MRV et propagation peut être compétitif voire supérieur à CP-SAT sur de petites instances.\n"
]
},
{
"cell_type": "markdown",
"id": "3b2cc538-f88e-45b8-938b-1656c791b611",
"metadata": {},
"source": [
"**Lecture ancrée.** La vérification de parité confirme que toutes les méthodes trouvent des solutions valides, garantissant la cohérence des résultats.\n"
]
},
{
"cell_type": "markdown",
"id": "b628e519-a080-4b6b-b003-694f41c1f3ea",
Expand Down
Loading
Loading