{"id":19445610,"url":"https://github.com/quarkgluant/sudoku","last_synced_at":"2025-04-25T01:31:26.962Z","repository":{"id":56320267,"uuid":"244954462","full_name":"quarkgluant/sudoku","owner":"quarkgluant","description":"A kata for the ParisRubyWorkshop, to verify the validity of a filled sudoku grid","archived":false,"fork":false,"pushed_at":"2020-11-14T17:40:51.000Z","size":72,"stargazers_count":0,"open_issues_count":0,"forks_count":14,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-03T14:39:56.978Z","etag":null,"topics":["ruby","sudoku","sudoku-checker"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/quarkgluant.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-03-04T16:52:23.000Z","updated_at":"2020-04-02T18:32:49.000Z","dependencies_parsed_at":"2022-08-15T16:40:15.830Z","dependency_job_id":null,"html_url":"https://github.com/quarkgluant/sudoku","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quarkgluant%2Fsudoku","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quarkgluant%2Fsudoku/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quarkgluant%2Fsudoku/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quarkgluant%2Fsudoku/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/quarkgluant","download_url":"https://codeload.github.com/quarkgluant/sudoku/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250737976,"owners_count":21479114,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ruby","sudoku","sudoku-checker"],"created_at":"2024-11-10T16:11:17.206Z","updated_at":"2025-04-25T01:31:26.687Z","avatar_url":"https://github.com/quarkgluant.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Sudoku\n\nbon ben je crois que tout est dit dans le titre, à vous de jouer !\n\nQuelques détails tout de même, on ne vous demande pas de coder un programme capable de résoudre une grille donnée (sauf si\nvous voulez vous initier aux joies du [retour arrière/retour sur trace/backtracking](https://fr.wikipedia.org/wiki/Retour_sur_trace)),\n juste de déterminer si une grille donnée (sous forme d'un tableau de tableaux) et déjà remplie est valide ou pas.  \n \nComme d'habitude ~~Je me lève et je te bouscule\n                   Tu n'te réveilles pas\n                   Comme d'habituuudeeeeee~~ (oups désolé, j'ai confondu Soudoku avec karaoké) on vous fournit gracieusement un fichier de tests pour vous\n guider dans vos recherches.\n\n\nPour celles et ceux qui ne connaîtraient pas le principe de ce jeu, quelques précisions:  \nVoici comment se présente une grille de Sudokou:  \n\n![grille de Sudoku](220px-Sudoku-by-L2G-20050714.svg.png)\n\nUne grille de Sodoku se présente sous la forme d'une grille carrée de 9 lignes et 9 colonnes subdivisée en 9 sous-grilles carrées \nde 3 par 3 cases, appelées « régions », et partiellement pré-remplie avec des chiffres de 1 à 9.  \nLe but de ce jeu (*pas celui du kata, puisqu'ici on vous donne la grille déjà entièrement remplie!*) est de remplir entièrement la grille avec les chiffres de 1 à 9 de telle façon que \nchaque chiffre apparaisse **une\nfois et une seule** dans chaque ligne, dans chaque colonne et dans chaque région.\n\nVoici un autre exemple de grille de Sudolu résolue, dont les chiffres initiaux figurent en rouge, sur les diagonales:  \n\n![Exemple de grille résolue](220px-Diagonal-Sudoku-by-Skratt.svg.png)\n\nPour plus de détails sur l'historique, les méthodes de résolution, etc: [l'article de wikipedia sur le Soudoku](https://fr.wikipedia.org/wiki/Sudoku)\n \nVous trouverez dans le même répertoire un fichier de tests (thanks to [codewars](https://www.codewars.com/) pour les grilles),\n le but étant évidemment que votre code ~~casse la baraque~~ passe les tests !\n\n#### Conseils pour les juniors\nUn conseil (d'ailleurs j'ai rajouté des tests en ce sens, donc ce n'est plus un conseil mais une obligation !): \n\"diviser pour règner\", décomposer le problème, ici en créant des méthodes pour :\n * isoler les lignes (ça ne sera pas le plus \ndur ;-) )\n * une autre pour les colonnes (si vous cherchez bien dans la [doc officielle](https://ruby-doc.org/core-2.6.5/Array.html), \nvous verrez qu'il existe une méthode pour cela, j'dis ça, j'dis rien bien-sûr)\n * et encore une autre pour les régions. Pour cette dernière, je vous conseille de noter sur papier vos recherches, \n notamment pour voir les indices des élèments ou des triplets. Et vous faites du Ruby, donc évitez les boucles *while* et\n *for*, utilisez plutôt [Array#each](https://ruby-doc.org/core-2.6.5/Array.html#method-i-each) ou ses dérivées telle [Enumerable#each_slice](https://ruby-doc.org/core-2.6.5/Enumerable.html#method-i-each_slice).  \n la méthode [Range#step](https://ruby-doc.org/core-2.6.5/Range.html#method-i-step) peut aussi vous être utile. *ce sont des pistes/conseils, pas des obligations !*\n * Plus une dernière méthode qui vérifie si chaque partie (ligne, colonne ou région) est correctement remplie, donc avec \ntous les chiffres de 1 à 9, chacun présent une seule fois (avec, par exemple l'utilisation de la structure de données [Set](https://ruby-doc.org/stdlib-2.6.5/libdoc/set/rdoc/Set.html), \nqui est comme un Array mais où chaque élèment est unique, mais, encore une fois, c'est juste une suggestion, pas une obligation).  \nVous remarquerez que cette méthode \".valid?\" teste des tableaux/Array, \ndonc vous allez utiliser une propriété de Ruby : la possibilité de réouvrir une classe, y compris celles de base de Ruby, \nici \"Array\" pour y rajouter des méthodes (ici, la méthode .valid?), le \"monkey patching\". **Ceci (la réouverture de classes de base de Ruby) n'est \npas à utiliser en prod**. Utilisez plutôt les \"raffinements\" (refinements) en VO, cf la doc sur les [refinements](https://ruby-doc.org/core-2.6.5/doc/syntax/refinements_rdoc.html) \nqui limitent la portée des modifications.\n\nN.B. Petit test d'attention : avez-vous remarqué que, pas une seule fois (hormis dans le titre de ce README) le nom de \nce jeu n'a été correctement orthographié :-) ?\n\n#### Pour les tests\nPour lancer les tests fournis, vous aurez besion de la gem Minitest. Pour l'installer, ouvrez votre terminal\net lancer la commande suivante:\n\n    gem install minitest\n\nSi vous voulez une sortie  en couleurs, rajoutez `require 'minitest/pride'` en haut du fichier test, ou notez l'instruction\n alternative, ci-dessous, pour lancer le fichier test.\n\nPour lancer les tests, depuis le dossier de l'exercise, utilisez cette commande:\n\n    ruby sudoku_test.rb\n\npour inclure la couleur, utiliez plutôt cette commande:\n\n    ruby -r minitest/pride sudoku_test.rb\n\n\n### English version\n\nThe goal of this kata is to check if an already filled grid is good or not (each and every row, column, and region (a 3x3 \nbox) contains the numbers one through nine only once..) for [more explanations of this game, the Wikipedia page](https://en.wikipedia.org/wiki/Sudoku).\n\nWith this README, you can find in the same directory a file with some tests.\n\nFor running the tests provided, you will need the Minitest gem. Open a\nterminal window and run the following command to install minitest:\n\n    gem install minitest\n\nIf you would like color output, you can `require 'minitest/pride'` in\nthe test file, or note the alternative instruction, below, for running\nthe test file.\n\nRun the tests from the exercise directory using the following command:\n\n    ruby saddle_points_test.rb\n\nTo include color from the command line:\n\n    ruby -r minitest/pride saddle_points_test.rb\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquarkgluant%2Fsudoku","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fquarkgluant%2Fsudoku","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquarkgluant%2Fsudoku/lists"}