Division euclidienne

Une grille.

On dispose d'une grille 16 sur 16, on numérote les cellules comme ci-dessous.

0123456789101112131415
16171819202122232425262728293031
32333435363738394041424344454647
48495051525354555657585960616263
64656667686970717273747576777879
80818283848586878889909192939495
96979899100101102103104105106107108109110111
112113114115116117118119120121122123124125126127
128129130131132133134135136137138139140141142143
144145146147148149150151152153154155156157158159
160161162163164165166167168169170171172173174175
176177178179180181182183184185186187188189190191
192193194195196197198199200201202203204205206207
208209210211212213214215216217218219220221222223
224225226227228229230231232233234235236237238239
240241242243244245246247248249250251252253254255

On numérote les lignes et les colonnes de 0 à 15.

col 0col 1col 2col 3col 4col 5col 6 col 7col 8col 9col10col11col12col13col14col15
lig00123456789101112131415
lig116171819202122232425262728293031
lig232333435363738394041424344454647
lig348495051525354555657585960616263
lig464656667686970717273747576777879
lig580818283848586878889909192939495
lig696979899100101102103104105106107108109110111
lig7112113114115116117118119120121122123124125126127
lig8128129130131132133134135136137138139140141142143
lig9144145146147148149150151152153154155156157158159
lig10160161162163164165166167168169170171172173174175
lig11176177178179180181182183184185186187188189190191
lig12192193194195196197198199200201202203204205206207
lig13208209210211212213214215216217218219220221222223
lig14224225226227228229230231232233234235236237238239
lig15240241242243244245246247248249250251252253254255
  1. lig et col étant les numéros de ligne et de colonne d'une cellule, exprimer le numéro porté dans la cellule en fonction de lig et col.
  2. On connait le numéro d'une cellule. Exprimer le numéro de ligne en fonction de ce numéro de cellule. Idem avec le numéro de colonne.

(numLigne, numColonne) → numCellule

On a : numéro de cellule = 16 * numéro de ligne + numéro de colonne.

Le script suivant de création de la grille illustre ce lien :

numCellule → (numLigne, numColonne)

Comme les numéros de colonne sont entre 0 et 15 (donc inférieurs strictement à 16), la relation "numéro de cellule = 16 * numéro de ligne + numéro de colonne" montre que le numéro de ligne est le quotient de la division du numéro de cellule par 16 et le numéro de colonne le reste de la division du numéro de cellule par 16.

Vous pouvez tester ci-dessous que ces liens sont corrects.

Grille de Sudoku .

Numérotation des cellules

Dans l'objectif de travailler sur un jeu de Sudoku, on numérote les cellules de la grille de gauche à droite et de haut en bas de 0 à 80.

L'affichage du petit programme suivant permet de visualiser cette numérotation :

Questions

  1. i et j étant des numéros de cellules, quelle sera, dans un programme javascript, l'utilité du test
    i%9 == j%9 ?
  2. i et j étant des numéros de cellules, quelle sera, dans un programme javascript, l'utilité du test
    Math.floor(i/9) == Math.floor(j/9) ?
  3. i et j étant des numéros de cellules, quelle sera, dans un programme python, l'utilité du test
    3*Math.floor(i/27) + Math.floor( (i%9)/3 ) == 3* Math.floor(j/27) + Math.floor( (j%9)/3 ) ?

reste de la division de i par 9 == reste de la division de j par 9

Ce test vaut True si et seulement si les deux cellules sont dans la même colonne.

quotient de la division de i par 9 == quotient de la division de j par 9

Ce test vaut True si et seulement si les deux cellules sont dans la même ligne.

3* (quotient de i par 27) + quotient de i%9 par 3

Ce test vaut True si et seulement si les deux cellules sont dans le même "carré". Carré est ici pris au sens d'une zone carrée d'un sudoku. On met en évidence ci-dessous les 9 carrés et la numérotation utilisée dans le test :

Remarque : pour modifier les couleurs automatiquement, on a appliqué les formules de cette page permettant de transformer une série de valeurs de l'intervalle [0;8] en une série de valeurs de l'intervalle [0;255].