Code Monkey home page Code Monkey logo

sudoku's Introduction

Sudoku

bon ben je crois que tout est dit dans le titre, à vous de jouer !

Quelques 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 vous voulez vous initier aux joies du retour arrière/retour sur trace/backtracking), juste de déterminer si une grille donnée (sous forme d'un tableau de tableaux) et déjà remplie est valide ou pas.

Comme d'habitude Je me lève et je te bouscule Tu n'te réveilles pas Comme d'habituuudeeeeee (oups désolé, j'ai confondu Soudoku avec karaoké) on vous fournit gracieusement un fichier de tests pour vous guider dans vos recherches.

Pour celles et ceux qui ne connaîtraient pas le principe de ce jeu, quelques précisions:
Voici comment se présente une grille de Sudokou:

grille de Sudoku

Une 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 de 3 par 3 cases, appelées « régions », et partiellement pré-remplie avec des chiffres de 1 à 9.
Le 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 chaque chiffre apparaisse une fois et une seule dans chaque ligne, dans chaque colonne et dans chaque région.

Voici un autre exemple de grille de Sudolu résolue, dont les chiffres initiaux figurent en rouge, sur les diagonales:

Exemple de grille résolue

Pour plus de détails sur l'historique, les méthodes de résolution, etc: l'article de wikipedia sur le Soudoku

Vous trouverez dans le même répertoire un fichier de tests (thanks to codewars pour les grilles), le but étant évidemment que votre code casse la baraque passe les tests !

Conseils pour les juniors

Un conseil (d'ailleurs j'ai rajouté des tests en ce sens, donc ce n'est plus un conseil mais une obligation !): "diviser pour règner", décomposer le problème, ici en créant des méthodes pour :

  • isoler les lignes (ça ne sera pas le plus dur ;-) )
  • une autre pour les colonnes (si vous cherchez bien dans la doc officielle, vous verrez qu'il existe une méthode pour cela, j'dis ça, j'dis rien bien-sûr)
  • et encore une autre pour les régions. Pour cette dernière, je vous conseille de noter sur papier vos recherches, notamment pour voir les indices des élèments ou des triplets. Et vous faites du Ruby, donc évitez les boucles while et for, utilisez plutôt Array#each ou ses dérivées telle Enumerable#each_slice.
    la méthode Range#step peut aussi vous être utile. ce sont des pistes/conseils, pas des obligations !
  • Plus une dernière méthode qui vérifie si chaque partie (ligne, colonne ou région) est correctement remplie, donc avec tous les chiffres de 1 à 9, chacun présent une seule fois (avec, par exemple l'utilisation de la structure de données Set, qui est comme un Array mais où chaque élèment est unique, mais, encore une fois, c'est juste une suggestion, pas une obligation).
    Vous remarquerez que cette méthode ".valid?" teste des tableaux/Array, donc vous allez utiliser une propriété de Ruby : la possibilité de réouvrir une classe, y compris celles de base de Ruby, ici "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 pas à utiliser en prod. Utilisez plutôt les "raffinements" (refinements) en VO, cf la doc sur les refinements qui limitent la portée des modifications.

N.B. Petit test d'attention : avez-vous remarqué que, pas une seule fois (hormis dans le titre de ce README) le nom de ce jeu n'a été correctement orthographié :-) ?

Pour les tests

Pour lancer les tests fournis, vous aurez besion de la gem Minitest. Pour l'installer, ouvrez votre terminal et lancer la commande suivante:

gem install minitest

Si vous voulez une sortie en couleurs, rajoutez require 'minitest/pride' en haut du fichier test, ou notez l'instruction alternative, ci-dessous, pour lancer le fichier test.

Pour lancer les tests, depuis le dossier de l'exercise, utilisez cette commande:

ruby sudoku_test.rb

pour inclure la couleur, utiliez plutôt cette commande:

ruby -r minitest/pride sudoku_test.rb

English version

The 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 box) contains the numbers one through nine only once..) for more explanations of this game, the Wikipedia page.

With this README, you can find in the same directory a file with some tests.

For running the tests provided, you will need the Minitest gem. Open a terminal window and run the following command to install minitest:

gem install minitest

If you would like color output, you can require 'minitest/pride' in the test file, or note the alternative instruction, below, for running the test file.

Run the tests from the exercise directory using the following command:

ruby saddle_points_test.rb

To include color from the command line:

ruby -r minitest/pride saddle_points_test.rb

sudoku's People

Contributors

quarkgluant avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.