tag:linuxfr.org,2005:/tags/casse_t%C3%AAte/publicLinuxFr.org : les contenus étiquetés avec « casse_tête »2018-05-11T09:18:40+02:00/favicon.pngtag:linuxfr.org,2005:News/385822018-05-06T01:42:59+02:002018-05-06T09:26:42+02:00Générateurs de jeux de lettres/chiffres libresLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<div><p>Il y a quelque temps, j’étais à la recherche de générateurs de jeux de lettres/chiffres (<em>puzzles</em>) personnalisables (dont la solution serait un petit mot doux romantique). Des <em>puzzles</em> qui ne soient pas uniquement jouables en ligne, mais imprimables, ne nécessitant qu’une feuille et un crayon.</p>
<p><abbr title="Note des modérateurs">NdM</abbr>: <a href="https://fr.wiktionary.org/wiki/puzzle">Wiktionary</a> précise que « <em>Le mot français puzzle est plus limité que le mot anglais. Sans autre précision, le mot français réfère uniquement à un jigsaw puzzle en anglais.</em> » On entendra le mot puzzle comme jeu de lettres/chiffres (plus généralement de caractères) dans cette dépêche. </p>
<p>Au final, j’ai découvert de nombreux programmes libres permettant de générer des mots croisés, des grilles de mot mystère, des nonogrammes, etc.</p>
<p>Je vais donc dans cette dépêche vous présenter ces projets, en espérant qu’ils vous inspirent à concocter vos propres <em>puzzles</em> pour vos enfants, neveux, compagnon ou compagne, ou encore grands‐parents !</p></div><ul><li>lien nᵒ 1 : <a title="https://github.com/riverrun/genxword" hreflang="en" href="https://linuxfr.org/redirect/101931">Le genxword de riverrun</a></li><li>lien nᵒ 2 : <a title="https://github.com/HandsomeOne/Nonogram" hreflang="en" href="https://linuxfr.org/redirect/101932">Le nonogramme de Zhou Qi</a></li><li>lien nᵒ 3 : <a title="https://lucas-c.github.io/wordfind/" hreflang="en" href="https://linuxfr.org/redirect/101933">Le mot mystère de bunkat</a></li><li>lien nᵒ 4 : <a title="https://github.com/robatron/sudoku.js" hreflang="en" href="https://linuxfr.org/redirect/101934">Un générateur de sudoku</a></li></ul><div><h2 id="mots-croisés">Mots croisés</h2>
<p>Je n’ai testé qu’un seul programme, en Python, de David Whitlock (<em>riverrun</em>) : <a href="https://github.com/riverrun/genxword">genxword</a>.</p>
<p>Voici un exemple de grille qui peut être générée :<br><img src="//img.linuxfr.org/img/68747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f726976657272756e2f67656e78776f72642f6d61737465722f6578616d706c65732f6f75747075742f5064665f677269645f6578616d706c652e706e67/Pdf_grid_example.png" alt="Exemple de grille avec indices sur le thème des Monty Python" title="Source : https://raw.githubusercontent.com/riverrun/genxword/master/examples/output/Pdf_grid_example.png"></p>
<p>Pour fonctionner, le programme nécessite qu’on lui fournisse une liste de mots, qui sont donc entièrement personnalisables. Chaque mot de la liste peut être associé à une définition. <code>genxword</code> peut générer des grilles sous forme de PDF, de PNG ou de SVG. Il est compatible Python 2 & 3, est basé sur GTK, mais fonctionne sous Windows (j’ai testé) et est sous licence GPL v3.</p>
<h2 id="nonogrammes">Nonogrammes</h2>
<p>Également appelés <a href="https://fr.wikipedia.org/wiki/Picross"><em>picross</em> ou <em>griddlers</em> en anglais, ou encore <em>hanjie</em> au Japon</a>, ces jeux sont parmi mes préférés.</p>
<p>J’ai essayé plusieurs programmes pour générer ce type de jeux, mais mon préféré, de loin, est <a href="https://github.com/HandsomeOne/Nonogram">celui de Zhou Qi (<em>HandsomeOne</em>) en JavaScript</a> :<br><img src="//img.linuxfr.org/img/687474703a2f2f692e696d6775722e636f6d2f585273336a6b372e676966/XRs3jk7.gif" alt="Nonogram par Zhou Qi" title="Source : http://i.imgur.com/XRs3jk7.gif"></p>
<p>Il inclut une grille cliquable pour y jouer, un éditeur interactif pour confectionner vos propres grilles et même un solveur avec rendu visuel des étapes pas à pas, permettant de valider que la grille a une solution ! Le code est structuré et lisible facilement, sans dépendances et sous licence MIT.</p>
<p>Comme au final un nonogramme n’est qu’une image pixelisée en noir et blanc, j’ai fait un <a href="https://github.com/Lucas-C/Nonogram/"><em>fork</em></a> du projet pour simplement rajouter deux boutons permettant d’importer ou exporter <a href="https://github.com/Lucas-C/Nonogram/tree/master/grids">des grilles au format PNG</a> : <a href="https://lucas-c.github.io/Nonogram/">https://lucas-c.github.io/Nonogram/</a> (dans la section <em>Create Your Own Nonogram</em>).</p>
<h2 id="mot-mystère">Mot mystère</h2>
<p>Aussi appelé « <a href="https://fr.wikipedia.org/wiki/Mots_cach%C3%A9s">mots cachés</a> », ce jeu de lettres est idéal pour camoufler un message secret dans une grille, afin qu’il soit reconstitué une fois résolu !</p>
<p>Bill Scheidel (<em>bunkat</em>) a créé en JavaScript <a href="https://github.com/bunkat/wordfind">une grille jouable en ligne, avec éditeur intégré</a> :<br><img src="//img.linuxfr.org/img/68747470733a2f2f6368657a736f692e6f72672f6c756361732f776f726466696e642e706e67/wordfind.png" alt="Capture d’écran de wordfind.js" title="Source : https://chezsoi.org/lucas/wordfind.png"></p>
<p>Vous pouvez y lister les mots à cacher dans la grille, votre mot secret, l’extension maximum de la grille ou encore le nombre de mots qui peuvent être « ignorés » parmi ceux fournis afin que le générateur produise une grille compacte.</p>
<p>Bref, c’est un programme simple d’utilisation, sans dépendance et sous licence MIT.</p>
<h2 id="sudoku">Sudoku</h2>
<p>Je ne l’ai que très peu testé, mais voici <a href="https://github.com/robatron/sudoku.js">un générateur de Sudoku écrit par Rob McGuire (<em>robatron</em>) en JavaScript</a> :<br><img src="//img.linuxfr.org/img/68747470733a2f2f6368657a736f692e6f72672f6c756361732f5375646f6b754a532e706e67/SudokuJS.png" alt="Capture d’écran de Sudoku.js" title="Source : https://chezsoi.org/lucas/SudokuJS.png"></p>
<p>Utilisant jQuery et la bibliothèque Bootstrap, ce projet est sous licence MIT et vous permettra de générer vos propres grilles.</p>
<p>Pour ceux qui préfèrent d’autres langage que le JavaScript, sachez que comme le Sudoku est un jeu très populaire, vous trouverez de nombreux générateurs et versions jouables sur GitHub en Python, Ruby, etc.</p>
<h2 id="et-plein-dautres-jeux-originaux">Et plein d’autres jeux originaux !</h2>
<p>Pour conclure, je voudrais mentionner <a href="https://www.chiark.greenend.org.uk/%7Esgtatham/puzzles/">la collection de <em>puzzles</em> de Simon Tatham</a>, sous licence MIT et disponibles en Java ou JavaScript, qui est à la fois immense et regorge de jeux originaux :<br><img src="//img.linuxfr.org/img/68747470733a2f2f6368657a736f692e6f72672f6c756361732f53696d6f6e54617468616d50757a7a6c65436f6c6c656374696f6e2e706e67/SimonTathamPuzzleCollection.png" alt="La collection de _puzzles_ de Simon Tatham" title="Source : https://chezsoi.org/lucas/SimonTathamPuzzleCollection.png"></p></div><div><a href="https://linuxfr.org/news/generateurs-de-jeux-de-lettres-chiffres-libres.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/114398/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/generateurs-de-jeux-de-lettres-chiffres-libres#comments">ouvrir dans le navigateur</a>
</p>
Lucas-CBenoît SibaudDavy DefaudZeroHeurehttps://linuxfr.org/nodes/114398/comments.atomtag:linuxfr.org,2005:Post/323692013-02-28T18:17:03+01:002013-03-01T11:25:57+01:00algorithme de force brute<p>bonjour,</p>
<p>je suis en train de travailler sur un sujet de programmation en Ruby de façon à me faire la main sur le langage.</p>
<p>Le sujet porte sur un puzzle comportant 3x3 pièces. J'ai mis en place les classes : Piece, Puzzle, Tas, Solver ainsi que toutes les méthodes permettant de manipuler le puzzle.</p>
<p>Chaque pièce est composée de 4 faces qui doivent être jointives 2 à 2. Sur chaque face, une partie d'un animal est dessiné en relief : soit la partie supérieur (tête), soit la partie inférieure. Il y a 4 sortes d'animaux : coccinelle, sauterelle (grillon), araignée, abeille.</p>
<p>Sauf erreur de ma part, la combinatoire est d'environ 9!*4, soit 1451520.</p>
<p>Quelques infos en vrac :</p>
<ul><li>Les cases du puzzle sont numérotées de 1..9 pour les z'humains et de 0..8 pour mon logiciel</li>
<li>Les pièces recevront des valeurs numériques de 0 à 8 pour représenter les figurines animales</li>
<li>Les pièces s'assembleront paire à paire : (0,1), (2,3), (4,5), (6,7)</li>
<li>Le puzzle est numéroté de cette façon :</li>
</ul><pre>
<code class=""> 0 1 2
3 4 5
6 7 8
</code>
</pre>
<p>Pour résoudre le puzzle, il faut replacer les pièces dans un certain ordre et faire en sorte que les parties hautes et basses s'assemblent.</p>
<p>J'ai réalisé 2 solveurs :</p>
<ul><li>le premier est purement aléatoire et n'a aucun intérêt, si ce n'est de documenter l'API,</li>
<li>le second est semi-aléatoire :
<ul><li>je choisis une pièce aléatoire dans le tas pour laquelle j'applique une rotation aléatoire</li>
<li>puis, je remplis successivement les cases 1, 3, 5, 7 en calculant les contraintes de placement, puis en choisissant une pièce au hasard dans la liste des possible,</li>
<li>je répète ensuite l'opération avec les coins : cases 0, 2, 6, 8.</li>
</ul></li>
</ul><p>Conclusion :</p>
<ul><li>mon algorithme semi-aléatoire me permet de découvrir que le puzzle n'a qu'une seule solution avec 4 variantes (liées à la rotation du l'ensemble du puzzle), cela reste tout de même à confirmer,</li>
<li>c'est pour cela que je souhaite réaliser une méthode de balayage systématique.</li>
</ul><p>Je n'arrive pas très bien a voir comment réaliser ce balayage. Les paramètres sont les suivants :</p>
<ul><li>en entrée : tas, puzzle,</li>
<li>en sortie les puzzles résolus,</li>
<li>les variants : angle de rotation des pièces et ordre dans lequel les pièces sont disposées dans sur le puzzle.</li>
</ul><p>Habituellement, cela se réalise avec une belle fonction récursive, dans laquelle on embarque tous les paramètres et on agit sur les variants. Je sèche. L'objet de ce message est aussi d'échanger sur Ruby, algorithmique. L'objet de ce message n'est pas d'avoir une solution toute faite, mais plutôt d'obtenir des pistes de réflexion.</p>
<p>Liens :</p>
<ul><li>voici le code source et la doc : <a href="https://github.com/mqu/divers/tree/master/puzzle">https://github.com/mqu/divers/tree/master/puzzle</a></li>
</ul><p>bien à vous.</p><div><a href="https://linuxfr.org/forums/programmation-ruby/posts/algorithme-de-force-brute.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/97550/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/programmation-ruby/posts/algorithme-de-force-brute#comments">ouvrir dans le navigateur</a>
</p>
Marc Quintonhttps://linuxfr.org/nodes/97550/comments.atom