top of page

Application de sudoku sur internet




Le Monde vit aujourd’hui une période anxiogène, du fait de nombreuses calamités en cours : guerre en Ukraine, pandémie du virus, réchauffement climatique, instabilité économique, pénuries de matières premières, surpopulation humaine avec aussi une extinction de nombreuses espèces,


Comment la science et la technologie peuvent-elles contribuer à apporter des motifs d’espérance ?


J’apporte ma contribution en m’appuyant sur une réalisation remarquable, que je viens de terminer : application du jeu de sudoku sur internet, sur le site www.sudokunew.com. Ce travail m’a demandé 9 ans de durs efforts. Mais le résultat me satisfait et est concluant.


Je m’appelle Raoul SALZBERG (Supélec 1964), et ma contribution portera essentiellement sur les leçons que j’ai tirées de la réalisation de ce logiciel sur internet.


Ma réflexion essentielle est la suivante :


Non pas expliquer quoi faire et comment le faire, mais faire et expliquer comment on a fait


Car c’est quand on met les mains dans le cambouis qu’on peut comprendre vraiment comment cela fonctionne.


Je m’en vais donc expliquer et détailler ma démarche qui a permis d’aboutir à ce résultat. Pour ensuite en tirer les leçons, essentiellement pour le développement d’applications sur internet, qui est un vaste domaine scientifique d’avenir.


Il faut établir en premier un cahier des charges initial, indiquant le principe du jeu de sudoku, à savoir :


Dans une grille carrée de côté 9, disposer des chiffres de 1 à 9, de telle façon qu’aucune case ayant un de ces chiffres affecté ne puisse être « vue » d’une autre case contenant ce chiffre. Les cases vues sont toutes celles de la même ligne, ou celles de la même colonne, ou encore celles du même bloc de 9 cases ; sachant que la grille est découpée en 9 blocs carrés de 9 cases.


A partir d’une grille initiale respectant la contrainte ci-dessus, le but du jeu est d’obtenir une grille finale ne comportant que des cases contenant un seul chiffre. Et cette solution doit être unique,


Les cases n’ayant pas de chiffre affecté, possède un certain nombre de chiffres-candidats, de manière à respecter la contrainte ci-dessus.


La méthode de résolution consiste alors à éliminer des chiffres-candidats, grâce à l’application de méthodes montrant qu’ils doivent être éliminés.


Le sudoku est donc un jeu d’élimination de chiffres-candidats, jusqu’à ce qu’il ne reste plus qu’un seul chiffre par case.


L’application de sudoku sur internet consiste donc à proposer une grille initiale, et à accompagner la résolution manuelle du joueur, étape par étape, en fournissant une aide optionnelle au joueur à chaque étape. Le temps de résolution complète du joueur permet de départager les joueurs entre eux.


C’est ainsi que fonctionnent la quasi-totalité des applications de sudoku sur internet.


Pour apporter un plus par rapport à toutes ces applications existantes, il faut donc étoffer ce cahier des charges initial, avec les 2 extensions suivantes :


  • Résolution automatique de la grille, en expliquant à chaque étape quelle méthode de résolution est appliquée. Outre les quelques méthodes de base connues, au nombre limité (environ 5), il existe de nombreuses méthodes plus ou moins sophistiquées (environ 50). Ce sont ces méthodes supplémentaires qui font la richesse du jeu de sudoku, et que la quasi-totalité des applications de sudoku sur internet ne proposent pas. Car le marché des joueurs de sudoku est constitué essentiellement de joueurs ne cherchant pas trop à se casser la tête, se contentant d’appliquer pas à pas quelques méthodes basiques. L’extension de proposer des méthodes de résolution plus sophistiquées s’adresse donc à des joueurs plus évolués, correspondant à peut-être 5 % du marché.

  • Génération automatique de grilles, selon une méthode aléatoire. Ce plus est rarement proposé par les applications de sudoku sur internet.


Ce cahier des charges étendu sert de base à la réalisation de l’application du jeu de sudoku sur internet que j’ai programmée.


Cependant, contrairement aux applications de sudoku sur internet existantes, ce programme ne met pas les joueurs en compétition entre eux. Son utilisation est solitaire. Il permet de comprendre le sudoku lui-même, avec toutes ses possibilités, jusqu’à un niveau d’expert. Environ 200 grilles y sont préprogrammées, dont les plus difficiles du marché. Et on peut y ajouter manuellement des grilles trouvées dans des revues ou sur internet. Sans compter les grilles générées automatiquement et à volonté, quand l’utilisateur le demande.


Ceci posé, il est nécessaire de faire les choix suivants :


  • Choisir les langages de programmation

  • Définir l’interface homme-machine, à la fois simple et complète (ce qui est contradictoire)

  • Proposer des grilles avec plusieurs niveaux de difficulté

  • Établir une plateforme d’échange avec le joueur : calcul du temps passé, classification des joueurs en fonction de leur rapidité de résolution, lien sous forme de blog de discussion, proposer une tarification pour un accès privilégié au site, et des challenges entre joueurs.


Ce schéma de base permet de fonctionner comme les autres applications existantes du marché (environ 18 300 000 sites référencés avec le moteur de recherche Google), en y ajoutant les extensions ci-dessus.


La fonctionnalité principale de l’application de sudoku sur internet que j’ai développée est donc, outre la génération de grilles, l’utilisation de méthodes de résolution sophistiquées. Il en existe 33 dans ce programme, avec des noms originaux : l’attaque du cobra, la griffe du tigre, la piste du tigre, l’espadon, le rectangle vide, le cerf-volant, etc... Et ce programme permet de résoudre toutes les grilles, y compris les plus compliquée du marché, comme : Al Escargot (grille finlandaise), Easter Monster 1 et 2 (grilles américaines), Blonde Platine, etc...


C’est pour cela que, ayant consulté les meilleurs sites de sudoku, dont le site allemand Hodoku, créé en 2009, écrit en java, qui, pour moi est le meilleur jusqu’à présent, j’en ai conclu que mon site est bien le meilleur, et de loin, même s’il n’est pas encore référencé comme tel, car je viens de l’installer. Le programme de sudoku que j’ai développé est naturellement en open source.



Le développement d’applications sur internet


Le développement d’applications sur internet est un domaine appelé à prendre de l’extension, et à devenir une source importante d’activité.


La procédure que je conseille, après avoir développé cette application de sudoku sur internet, est la suivante :


  • Établir un premier cahier des charges de l’application que l’on veut développer. Ce cahier des charges va évoluer car un travail de création nécessite de fonctionner dans le brouillard et de faire des découvertes au fur et à mesure que l’on avance. Outre l’application elle-même, ce cahier des charges initial comporte une première description de l’interface homme-machine ; j’ai fait le choix d’éviter les menus déroulants et de privilégier les liens par icônes, à disposer le plus simplement possible sur l’écran.


  • Déterminer les outils que l’on va utiliser pour ce développement. Il en existe beaucoup, dont java, qui a servi au développement de Hodoku. J’ai fait le choix d’utiliser les outils de base internet : HTML, CSS et javascript. Pour la raison que la communauté de développeurs qui travaille sur ces outils de base est très importante (des dizaines de millions d’acteurs), est active et productive, et permet de supplanter avantageusement toutes les extensions existantes, comme les frameworks (react, dojo, ruby on rails, eclipse, et même jquery). Ce travail en mode dit natif, se nourrit de la consultation de sites offrant des nombreux exemples de programmation sur internet (comme W3Schools) ; ces sites proposent des exemples, sans expliquer en détail la théorie, ce qui est beaucoup plus clair. Cela permet de ne pas en permanence réinventer la brouette. Et c’est au cœur de l’Intelligence Artificielle, dont les applications basées sur l’apprentissage sont plus performantes que les applications basées sur la théorie. Que je résume par la formule : « La vie est plus riche que la théorie ».


  • Mettre en place les outils de débogage, pour corriger les erreurs : fautes de syntaxe (du genre virgule mal placée), fautes de programmation (donnant un résultat erroné ou même un plantage du calcul). Le débogage est un travail essentiel, que je compte expliquer dans un document à part. Comme le cahier des charges, le débogage évolue au fur et à mesure du développement.


Une fois mis en place une première mise en œuvre du cahier des charges, dont l’interface homme-machine (icônes et grille de sudoku), le développement consiste ensuite à avancer sur les fonctionnalités principales du programme (résolution manuelle, résolution automatique, génération de grille) tout en expliquant ce que l’on fait sur un document d’aide intégré au programme, et sur des explications annexes en dessous de la grille.


De nombreux écueils attendent le développeur, car les portions de code ajoutées au fur et à mesure ne répondent pas comme il faut immédiatement. La machine ayant toujours raison, il faut continuellement se remettre en cause. Et quand une solution est enfin trouvée, et que la réponse est correcte, il faut ensuite simplifier, car, en cherchant coûte que coûte un résultat correct, il arrive parfois qu’on se perd dans des détails sans intérêt, qu’il faut ensuite élaguer ; parfois 50 lignes de code sont résumées en moins de 10 lignes de code.


Et comme il n’existe personne pour vous expliquer où vous vous êtes trompé, cela prend du temps, de l’énergie et le découragement vous guette. On peut consulter sur internet comment faire fonctionner certaines fonctionnalités, ce qui est d’un grand secours. Il est arrivé que certains développements étaient trop emberlificotés, et jusqu’à 6 mois de travail a pu être jeté à la poubelle. La persévérance est payante mais ingrate.


Bilan général du développement réussi de l’application de sudoku sur internet


Outre la satisfaction d’avoir mené au bout ce développement, les principales leçons sont les suivantes :


  1. La création, dans quelque domaine que ce soit, ne se partage pas : chaque créateur fonctionne d’une manière spécifique qui lui est propre. Il est très difficile, voire impossible, de reprendre un travail de création effectué par un autre. C’est pourquoi l’open source est difficile à exploiter pour un autre que le créateur.

  2. Le travail de création nécessite beaucoup d’efforts et de persévérance, pour obtenir un résultat convaincant.

  3. Le créateur ne peut transmettre son savoir qu’en expliquant en détail et précisément les différentes étapes de sa création. C’est en transmettant ainsi son savoir qu’il fait œuvre productive. C’est cette étape essentielle, que je compte mettre en œuvre.

  4. Des éléments ayant été au centre de l’œuvre de création peuvent être expliqués séparément. C’est le cas du débogage. Que je compte aussi expliquer.

  5. Il y a un gros travail de nettoyage et d’extension à faire sur le programme :

  • Éliminer le code mort, c’est-à dire du code qui ne sert plus et qui est resté

  • Simplifier le code mal écrit. Cela fonctionne actuellement, mais c’est parfois mal écrit. En particulier, faire du code DRY (Don’t Repeat Yourself), c’est-à-dire non redondant.

  • Rendre les commentaires plus clairs et explicites

  • Réorganiser le programme de manière plus rationnelle

  • Clarifier les explications, que ce soit dans le manuel d’utilisation intégré, ou dans les explications spécifiques sous la grille

  • Corriger les erreurs qui ne manqueront pas d’apparaître en cas d’utilisation massive de ce programme : fautes de syntaxe ou fautes d’analyse

  • Ajouter des fonctionnalités supplémentaires, avec un cahier des charges étendu et des ajouts à l’interface homme-machine. Par exemple, ajouter de nouvelles méthodes de résolution, changer la génération de grilles.

  • Introduire une structure d’échanges avec les utilisateurs (blog par exemple)








.

18 vues0 commentaire

Comments


Post: Blog2_Post
bottom of page