Forum programmation
 
AccueilPortailFAQRechercherS'enregistrerMembresGroupesConnexion

Partagez | 
 

 sudoku

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : Précédent  1, 2, 3
AuteurMessage
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 28
Date d'inscription : 17/01/2007

MessageSujet: Re: sudoku   Mar 27 Mar - 23:16

mtcs a écrit:
... dsl. mais je compte sur toi

pour quoi faire ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mtcs
Administrateur
Administrateur
avatar

Nombre de messages : 1605
Date d'inscription : 21/11/2006

MessageSujet: Re: sudoku   Mar 27 Mar - 23:37

pour le tester et nous donne la solution
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 28
Date d'inscription : 17/01/2007

MessageSujet: Re: sudoku   Mer 28 Mar - 0:51

Moi j'ai déja testé, car c'est ma solution.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: sudoku   Mer 28 Mar - 8:51

et voici mon code. Je testerai ton code chakerbh. Mais le problème est qu'il est éparpié et je dois le rassembler en un seul morçeau.

Code:
program sudoku2;
type sudoku_rec = record
      i, j : byte;
      unk : string[9];
      sel : byte;
    end;
    tab_sudoku = array [1..81] of sudoku_rec;

(* retourne les valeurs manquants sur une ligne (line) donnée*)
function get_unk_line(grille : string ; line : integer):string;
var str, unk : string;
    c : char;
    i : integer;
begin
  str := '';
  for i:=0 to 8 do
    if (grille[line * 9 + i + 1] <> '0') then
      str := str + grille[line * 9 + i + 1]; 
 
  unk := '';
  for c := '1' to '9' do
    if (pos(c, str) = 0) then
      unk := unk + c;
       
  get_unk_line := unk;
end;

(* retourne les valeurs manquants sur une colonne (col) donnée*)
function get_unk_column(grille : string ; col : integer):string;
var str, unk : string;
    c : char;
    i : integer;
begin
  str := '';
  for i:=0 to 8 do
    if (grille[i * 9 + col + 1] <> '0') then
      str := str + grille[i * 9 + col + 1];
 
  unk := '';
  for c := '1' to '9' do
    if (pos(c, str) = 0) then
      unk := unk + c;
   
  get_unk_column := unk;
end;

(* retourne les valeurs manquants dans le bloc du point (col, line) données *)
function get_unk_bloc(grille : string ; col, line : integer):string;
var str, unk : string;
    c : char;
    i, j : integer;
begin
  col := (col div 3) * 3;
  line := (line div 3) * 3;
 
  str := '';
  for j:=0 to 2 do
    for i:=0 to 2 do
      if (grille[(line + j) * 9 + (col + i) + 1] <> '0') then
        str := str + grille[(line + j) * 9 + (col + i) + 1];
 
  unk := '';
  for c := '1' to '9' do
    if (pos(c, str) = 0) then
      unk := unk + c;

  get_unk_bloc := unk;
end;

(* retourne les valeurs qui se trouvent à la fois dans str1 et str2 *)
function intersect_string(str1, str2 : string):string;
var unk : string;
    i : integer;
begin
  unk := '';
  for i:=1 to length(str1) do
    if (pos(str1[i], str2) <> 0) then
      unk := unk + str1[i];
 
  intersect_string := unk;
end;

(* retourne la liste des valeurs possible pour un point donnée (col, line) *)
function get_unk_grid(grille : string ; col, line : integer):string;
var unk : string;
begin
  unk := '';
 
  if (grille[line * 9 + col + 1] = '0') then begin
    unk := intersect_string(get_unk_line(grille, line), get_unk_column(grille, col));
    unk := intersect_string(unk, get_unk_bloc(grille, col, line));
  end;
 
  get_unk_grid := unk;
end;

(* affiche la grille *)
procedure show_string(var grille : string);
var i, j : integer;
begin
  for j := 0 to 8 do begin
    if (j > 0) and (j mod 3 = 0) then
      Writeln('------------------');
   
    for i:=0 to 8 do begin
      if (i > 0) and (i mod 3 = 0) then Write('|') else Write(' ');
      if (grille[j * 9 + i + 1] <> '0') then
        Write(grille[j * 9 + i + 1])
      else
        Write('_');
    end;

    Writeln;
  end;
end;


(* affiche la grille *)
procedure show_var(var grille : string);
var i, j : integer;
begin
  for j := 0 to 8 do begin   
    for i:=0 to 8 do begin
      Write('t[',j+1,',',i+1,']:=',grille[j * 9 + i + 1],';');
      if (i mod 3 = 2) and (i > 0) then Writeln;;
    end;
    Writeln;
  end;
end;

(* Résoudre la grille par la logique (sans tirages au sort) *)
procedure resolve_grid(var grille : string);
var unk : string;
    trouve, somme, i, j, k, n, min, p : integer;
    t : tab_sudoku;
begin
  n := 0;
  somme := 0;
  repeat
    trouve := 0;
    for j:= 0 to 8 do
      for i:= 0 to 8 do begin
        unk := get_unk_grid(grille, i, j);
        if (length(unk) = 1) then begin
          grille[j * 9 + i + 1] := unk[1];
          trouve := trouve + 1;
        end;
      end;
    inc(somme, trouve);
  until (trouve = 0);
end;

(* vérifie si la grille est bonne càd que tous les nombres sont placés correctement *)
function is_grid_ok(var grille : string):boolean;
var i : integer;
    ch : string;
begin
  ch := '999999999';
  for i:=1 to length(grille) do begin
    dec(ch[ord(grille[i])-48]);
  end; 
  is_grid_ok := (ch = '000000000');
end;

(* détermine la liste des cases qui n'ont pas été remplies *)
procedure get_missing_values(var grille : string; var n : integer ; var t : tab_sudoku);
var i, j : integer;
    unk : string[9];
begin
  n := 0;
  for j:=0 to 8 do 
    for i:=0 to 8 do begin
      unk := get_unk_grid(grille, i, j);
      if (length(unk) > 1) then begin
        n := n + 1;
        t[n].i := i;
        t[n].j := j;
        t[n].unk := unk;
        t[n].sel := 0;
      end;
    end;
end;

var grille, grille2, unk : string;
    t : tab_sudoku;
    n, i : integer;
    bres : boolean;
begin
  randomize;
  grille := '100000000'+
            '000000000'+
            '000000000'+
            '000000000'+
            '000000000'+
            '000000000'+
            '000000000'+
            '000000000'+
            '000000000';
 
  Writeln('Grille Initiale');
  show_string(grille);
  Writeln;
 
  (* la grille est résolue par la logique sans tirage au sort *)
  resolve_grid(grille);
  bres := is_grid_ok(grille);
  (* si la grille n'est pas bonne
    on détermine quels sont les cases encore vides *)
  if (not bres) then begin
    grille2 := grille;
    get_missing_values(grille2, n, t); 
  end;
 
  while (not bres) do begin
    (* comme on est entrain de procéder par tatonnement
      on reprend à chaque fois avec la grille initiale *)
    grille2 := grille;
   
    (* comme on a n cases encore vides on effectuera des tirages au sort
      pour les remplir *)
    for i:=1 to n do begin
      unk := intersect_string(t[i].unk, get_unk_grid(grille2, t[i].i, t[i].j));
      if (length(unk) > 0) then begin
        grille2[t[i].j*9+t[i].i+1]:=unk[random(length(unk)) + 1];
      end;
    end;
    (* on teste si la grille a été bien remplie*)
    bres := is_grid_ok(grille2);
   
    (* si oui le résultat est retourné dans la grille initiale*)
    if (bres) then grille := grille2;
  end;
 
  (* enfin la grille finale est affichée *)
  Writeln('Grille Finale');
  show_string(grille);
  Readln;
end.

(*
Quelques exemples de grilles
exemple 1
'983705204'+
'050900060'+
'760040903'+
'301208690'+
'020010005'+
'006037080'+
'000582401'+
'408006029'+
'005190036';

exemple 2
'208300400'+
'040050060'+
'001079002'+
'400500600'+
'080010090'+
'013004005'+
'700800100'+
'020030040'+
'006007058';

exemple 3
'004009801'+
'107200009'+
'000800540'+
'870500003'+
'000093010'+
'093700020'+
'700005036'+
'020036000'+
'030180200';

exemple 4
'100002670'+
'076030000'+
'009005000'+
'030040021'+
'800027006'+
'000610580'+
'005006300'+
'060004059'+
'708000102';

exemple 5
'102700309'+
'050060020'+
'309001507'+
'507003204'+
'000080000'+
'603200805'+
'204800906'+
'070030040'+
'906002708';

exemple 6
'102700309'+
'000060020'+
'309000507'+
'507003004'+
'000080000'+
'603200805'+
'204800906'+
'070030040'+
'906002708';

exemple 7
'100000309'+
'000060020'+
'309000507'+
'507000004'+
'000080000'+
'600200805'+
'204800906'+
'000000040'+
'906002708';
*)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
makram
modérateur
modérateur
avatar

Nombre de messages : 549
Age : 28
Date d'inscription : 29/12/2006

MessageSujet: Re: sudoku   Mer 28 Mar - 11:13

j'ai voulu tester votre code source sur mon ordinateur mais il y a un erreur: runtime error 105
je vous demande de corriger le pb
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 28
Date d'inscription : 17/01/2007

MessageSujet: Re: sudoku   Mer 28 Mar - 11:36

Makram ajoute uses wincrt; au début.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 28
Date d'inscription : 17/01/2007

MessageSujet: Re: sudoku   Mer 28 Mar - 11:39

Manianis j'ai éparpillé le code pour mieux l'expliquer, le but ici n'est pas de se venter d'avoir trouvé une solution mais de s'aider à comprendre ce probléme et de le rendre accéssible pour tout le monde.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
makram
modérateur
modérateur
avatar

Nombre de messages : 549
Age : 28
Date d'inscription : 29/12/2006

MessageSujet: Re: sudoku   Mer 28 Mar - 12:04

merci chaker
le pg nous donne directement la solution c'est un erreur
il faut que nous trouvons la solution.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mtcs
Administrateur
Administrateur
avatar

Nombre de messages : 1605
Date d'inscription : 21/11/2006

MessageSujet: Re: sudoku   Mer 28 Mar - 12:34

bon travail mes amis Wink , voila une capture d'ecran de mon programme, il manque de qq chiffre. je n'arrive pas à les corriger moi meme Sad , merci de m'aider

Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 28
Date d'inscription : 17/01/2007

MessageSujet: Re: sudoku   Mer 28 Mar - 12:37

makram a écrit:
merci chaker
le pg nous donne directement la solution c'est un erreur
il faut que nous trouvons la solution.

Makram je vous prie de revenir à la premiére page de ce sujet et de relire les deux premiers messages.


manianis a écrit:
Oh, excusez moi ! J'ai oublié de vous dire qu'on
demande de faire un programme qui permet de trouver les éléments
manquants de cette grille.

J'ai déja réalisé le programme en Python
langage interprété et libre et puis je l'ai réalisé une seconde fois en
C++. Et je souhaite adapter ma solution en Pascal. Mais, avant
j'attends vos contributions.

Donc, si il vous affiche le résultat c'est qu'il marche bien.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 28
Date d'inscription : 17/01/2007

MessageSujet: Re: sudoku   Mer 28 Mar - 12:41

Mohamed le probléme c'est que tu as mal placé des valeurs, ainsi on remarque que dans la case (4,2) la seule valeur qu'on peut inserrer (par rapport au carreau) c'est 8 mais cette valeur existe déja dans cette ligne.
Donc il ya une condition qui a été mal écrite et qui a causé cette erreur. Pour résoudre ce probléme revérifie les conditions que tu as utilisé avant d'inserré une valeur à sa place.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: sudoku   Mer 28 Mar - 14:40

chakerbh a écrit:
Manianis j'ai éparpillé le code pour mieux l'expliquer, le but ici n'est pas de se venter d'avoir trouvé une solution mais de s'aider à comprendre ce probléme et de le rendre accéssible pour tout le monde.
Je ne suis pas avec vous pour me venter... mes connaissances sont trés limités je n'ai aucune raison pour le faire.

Lorsque le code est posté en un seul morceau il est plus simple de le copier/coller pour le tester sans avoir à parcourir tous les posts pour le rassembler et je trouve cela un peu ennyueux si les posts s'étendent sur plusieurs pages.
Pour expliquer le code il est conseillé d'ajouter des commentaires du style
(* ... *) et { ... } pour mieux illustrer le code (c'est l'utilité des commentaires dans un programme) ainsi celui qui lira ton code pourra comprendre au fur et à mesure de la lecture du programme le role de chaque portion.
Tu aurais peut-être remarqué que mon code est aussi truffé de commentaires pour expliquer ses rouages.
C'est mon avis... en tous cas.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: sudoku   Mer 28 Mar - 14:42

makram a écrit:
merci chaker
le pg nous donne directement la solution c'est un erreur
il faut que nous trouvons la solution.
Cela fera office d'un autre exercice.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: sudoku   Dim 1 Avr - 19:36

rouge
J'ai essayé mon programme avec une grille dite (very difficult) et je ne suis pas satisfait car le résultat apparait aprés 34 secondes à 8 minutes c'est énervant.

J'ai voulu essayer ta solution. Mais, chakerbh tu nous a donné la moitié de la solution ou est la procédure tatonne ? et la déclaration du type Tij que tu as utilisé.



s.t.p donne nous la solution complète.

:"': Very Happy Very Happy Very Happy Very Happy Very Happy
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
Chaker
Administrateur
Administrateur
avatar

Nombre de messages : 731
Age : 28
Date d'inscription : 17/01/2007

MessageSujet: Re: sudoku   Dim 1 Avr - 21:11

Voilà le programme complet :
Code:
program sudoku;
uses wincrt;
type ttab = array[1..9,1..9] of integer;
    ij=record
          i,j:integer;
        end;
    Tij=array[1..9]of ij;

function existeCa(T:TTab;i,j,N:integer):boolean;
  var l,c:integer;
      ok:boolean;
  begin
    ok:=false;
    if i<=3 then i:=0
    else if i<=6 then i:=1
    else i:=2;
    if j<=3 then j:=0
    else if j<=6 then j:=1
    else j:=2;
    for l:=i*3+1 to i*3+3 do
      for c:=j*3+1 to j*3+3 do
        if T[l,c]=N then ok:=true;
    existeCa:=ok;
  end;
 
function existeL(T:TTab;i,j,N:integer):boolean;
  var c:integer;
      ok:boolean;
  begin
    ok:=false;
    for c:=1 to 9 do
      if T[i,C]=N then ok:=true;
    existeL:=ok;
  end;

function existeC(T:TTab;i,j,N:integer):boolean;
  var l:integer;
      ok:boolean;
  begin
    ok:=false;
    for l:=1 to 9 do
      if T[l,j]=N then ok:=true;
    existeC:=ok;
  end;

  procedure affiche(T:TTab);
  var i,j:integer;
  begin
    for i:=1 to 9 do
      begin
        for j:=1 to 9 do
          if (j=3) OR (j=6)then write(T[i,j]:2,'|':2)
          else write(T[i,j]:2);
        writeln;
        if (i=3)OR(i=6) then writeln(' ---------------------');
      end;
  end;

procedure tatone(var T:TTab);
  var i,j,i1,j1,n,nb,max:integer;
      T1,T2:array[0..8]of integer;
  begin
    max:=0;
    i1:=1;
    j1:=1;
    for i:=1 to 9 do
      for j:=1 to 9 do
        if T[i,j]=0 then
          begin
            nb:=0;
            for n:=1 to 9  do
              if not (existeL(T,i,j,n) OR existeC(T,i,j,n) OR existeCa(T,i,j,n)) then
                begin
                  inc(nb);
                  T1[nb]:=n;
                end;
            if nb>max then
              begin
                i1:=i;
                j1:=j;
                for n:=0 to nb-1 do
                    T2[n]:=T1[n];
                max:=nb;
              end;
          end;
    randomize;
    if max>0 then T[i1,j1]:=T2[random(max)];
  end;

function calcul(T:TTab):integer;
  var i,j,nb:integer;
  begin
    nb:=0;
    for i:=1 to 9 do
      for j:=1 to 9 do
        if T[i,j]<>0 then inc(nb);
    calcul:=nb;
  end;

procedure copie(T1:TTab;var T2:TTab);
  var i,j:integer;
  begin
    for i:=1 to 9 do
      for j:=1 to 9 do
        T2[i,j]:=T1[i,j];
  end;

function nb_pos(T:TTab;i,j:integer):integer;
  var n,k:integer;
  begin
    k:=0;
    for n:=1 to 9 do
      if not (existeL(T,i,j,n) OR existeC(T,i,j,n) OR existeCa(T,i,j,n)) then inc(k);
    nb_pos:=k;
  end;

procedure verifL(var T:TTab);
  var i,j,n,k:integer;
      T1:Tij;
  begin
    for i:=1 to 9 do
      for n:=1 to 9 do
        begin
          k:=0;
          for j:=1 to 9 do
            if (T[i,j]=0)AND not (existeC(T,i,j,n) OR existeL(T,i,j,n)
                OR existeCa(T,i,j,n)) then
              begin
                k:=k+1;
                T1[k].i:=i;
                T1[k].j:=j;
              end;
          if k=1 then T[T1[k].i,T1[k].j]:=n;
        end;
  end;

procedure verifC(var T:TTab);
  var i,j,k,n:integer;
      T1:Tij;
  begin
    for j:=1 to 9 do
      for n:=1 to 9 do
        begin
          k:=0;
          for i:=1 to 9 do
            if (T[i,j]=0)AND not (existeC(T,i,j,n) OR existeL(T,i,j,n)
                OR existeCa(T,i,j,n)) then
              begin
                k:=k+1;
                T1[k].i:=i;
                T1[k].j:=j;
              end;
          if k=1 then T[T1[k].i,T1[k].j]:=n;
        end;
  end;

 procedure verifCa(var T:TTab);
  var i,i1,j,j1,n,k:integer;
      T1:Tij;
  begin
    for i1:=0 to 2 do
      for j1:=0 to 2 do
        for n:=1 to 9 do
          begin
          k:=0;
          for i:=i1*3+1 to i1*3+3 do
            for j:=j1*3+1 to j1*3+3 do
              if (T[i,j]=0)AND not (existeC(T,i,j,n) OR existeL(T,i,j,n)
                  OR existeCa(T,i,j,n)) then
                begin
                  k:=k+1;
                  T1[k].i:=i;
                  T1[k].j:=j;
                end;
          if k=1 then T[T1[k].i,T1[k].j]:=n;
          end;
  end;
 
procedure finale(var T:TTab);
  var i,j,i1,j1,n,nb,k,L,c,m,n1,n2:integer;
      T3:ttab;
      Ta:boolean;
      test:boolean;
  begin
    Ta:=false;
    c:=0;
    repeat
      inc(c);
      nb:=calcul(T);
      verifL(T);
      verifC(T);
      verifCa(T);

      test:=false;
      for i1:=1 to 9 do
        for j1:=1 to 9 do
            if (nb_pos(T,i1,j1)=0)AND(T[i1,j1]=0) then test:=true;


      if (calcul(T)=nb) then
          begin
            if not Ta then
              begin
                copie(T,T3);
                Ta:=true;
                tatone(T);
              end
            else if test then
                          begin
                            copie(T3,T);
                            tatone(T);
                          end
            else begin tatone(T);end;

          end;
    until (nb>=81)OR(c=1000);
    writeln;
  end;

var t : ttab;
begin
  t[1,1] := 1; t[1,2] := 0; t[1,3] := 0;
  t[1,4] := 0; t[1,5] := 0; t[1,6] := 0;
  t[1,7] := 0; t[1,8] := 0; t[1,9] := 0;
 
  t[2,1] := 0; t[2,2] := 0; t[2,3] := 0;
  t[2,4] := 0; t[2,5] := 0; t[2,6] := 0;
  t[2,7] := 0; t[2,8] := 0; t[2,9] := 0;
 
  t[3,1] := 0; t[3,2] := 0; t[3,3] := 0;
  t[3,4] := 0; t[3,5] := 0; t[3,6] := 0;
  t[3,7] := 0; t[3,8] := 0; t[3,9] := 0;

  t[4,1] := 0; t[4,2] := 0; t[4,3] := 0;
  t[4,4] := 0; t[4,5] := 0; t[4,6] := 0;
  t[4,7] := 0; t[4,8] := 0; t[4,9] := 0;
 
  t[5,1] := 0; t[5,2] := 0; t[5,3] := 0;
  t[5,4] := 0; t[5,5] := 8; t[5,6] := 0;
  t[5,7] := 0; t[5,8] := 0; t[5,9] := 0;
 
  t[6,1] := 0; t[6,2] := 0; t[6,3] := 0;
  t[6,4] := 0; t[6,5] := 0; t[6,6] := 0;
  t[6,7] := 0; t[6,8] := 0; t[6,9] := 0;

  t[7,1] := 0; t[7,2] := 0; t[7,3] := 0;
  t[7,4] := 0; t[7,5] := 0; t[7,6] := 0;
  t[7,7] := 0; t[7,8] := 0; t[7,9] := 0;
 
  t[8,1] := 0; t[8,2] := 0; t[8,3] := 0;
  t[8,4] := 0; t[8,5] := 0; t[8,6] := 0;
  t[8,7] := 0; t[8,8] := 0; t[8,9] := 0;
 
  t[9,1] := 0; t[9,2] := 0; t[9,3] := 0;
  t[9,4] := 0; t[9,5] := 0; t[9,6] := 0;
  t[9,7] := 0; t[9,8] := 0; t[9,9] := 0;
 
  affiche(t);
 
  finale(t);
  affiche(t);
end.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: sudoku   Dim 1 Avr - 23:36

Trés bien merci chakerbh.

:&":
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: sudoku   Lun 2 Avr - 9:02

Parfois le programme ne donne pas une solution correcte ???

1 4 6 | 3 7 8 | 9 0 0
0 8 0 | 6 1 4 | 5 3 7
0 7 0 | 5 9 3 | 6 4 1
---------------------
0 6 4 | 1 0 0 | 3 5 9
3 9 0 | 4 8 6 | 1 7 0
0 5 3 | 9 3 0 | 4 6 8
---------------------
6 3 3 | 3 4 3 | 3 1 5
5 3 0 | 3 6 1 | 8 9 4
4 1 0 | 8 5 9 | 7 0 6

Pour la matrice suivante :

1 0 0 | 0 0 0 | 0 0 0
0 0 0 | 0 0 0 | 0 0 0
0 0 0 | 0 0 0 | 0 0 0
---------------------
0 0 0 | 0 0 0 | 0 0 0
0 0 0 | 0 8 0 | 0 0 0
0 0 0 | 0 0 0 | 0 0 0
---------------------
0 0 0 | 0 0 0 | 0 0 0
0 0 0 | 0 0 0 | 0 0 0
0 0 0 | 0 0 0 | 0 0 0
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
manianis
V.I.P
V.I.P
avatar

Nombre de messages : 471
Age : 107
Date d'inscription : 19/03/2007

MessageSujet: Re: sudoku   Lun 2 Avr - 13:01

Les stratégies de résolution de sudoku sont bien expliqués dans ce site web.
http://act365.com/sudoku/StrategyTypes.htm
Attention l'explication est en anglais.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://manianis.sitesled.com/
mtcs
Administrateur
Administrateur
avatar

Nombre de messages : 1605
Date d'inscription : 21/11/2006

MessageSujet: Re: sudoku   Lun 2 Avr - 18:17

merci manianis pour le site
il permet aussi de jouer ici http://act365.com/sudoku/
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
makram
modérateur
modérateur
avatar

Nombre de messages : 549
Age : 28
Date d'inscription : 29/12/2006

MessageSujet: Re: sudoku   Lun 2 Avr - 18:44

merci mohamed et manianis pour le site .
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: sudoku   

Revenir en haut Aller en bas
 
sudoku
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 3 sur 3Aller à la page : Précédent  1, 2, 3
 Sujets similaires
-
» [PROJET] sudoku
» SUDOKU solution

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum programmation :: Programmation :: Delphi & Pascal :: Pascal :: Exercices-
Sauter vers: