Page 1 sur 1

Soudokou

Publié : jeu. 19/janv./2006 15:04
par SORLET
Voilà mon premier programme en Pure basic. Il s'appelle Soudokou. Il trouve la solution (Pas toujours) des grilles qui sont dans la section Data. J'ai inséré en ligne 340 un délai entre les étapes pour suivre le travail.

Je sais, il faudrait intégrer une saisie des numéros initiaux. Je pourrais aussi ajouter un module de génération automatique de grille. Il faudrait surtout améliorer le moteur pour qu'il trouve toujours une ou plusieurs solutions.

Je demande votre indulgence. J'accepte toutes les remarques, toutes les critiques, toutes les propositions. J'ai conscience que mon code souffre de faiblesses. J'ai des mauvaises habitudes. Je maîtrise mal la structure du Pure Basic. C'est surtout dans ce domaine que j'espère des corrections. Si par ailleurs ma pure-prose peut vous donner des idées, tant mieux.

Code : Tout sélectionner

Gosub Principale : End

Principale: ;(
  Titre$ = "Soudokou Pure Basic"
  Fenetre1= OpenWindow(#PB_Any,0,0,1016,740,$00CF0001,Titre$)
  Menu1 = CreateMenu(#PB_Any, WindowID(Fenetre1))
  Gadget1 = CreateGadgetList(WindowID(Fenetre1))
  InitSprite() : InitKeyboard() : OpenScreen(1000,724,24,"oui")
  If Fenetre1 And Menu1 And Gadget1
    MenuTitle("Fichier")
      MenuItem( 0, "Jeu 01")
      MenuItem( 1, "Jeu 02")
      MenuItem( 2, "Jeu 03")
      MenuItem( 3, "Jeu 04")
      MenuItem( 4, "Jeu 05")
      MenuItem( 5, "Jeu 06")
      MenuItem( 6, "Jeu 07")
      MenuItem( 7, "Jeu 08")
      MenuBar()
      MenuItem( 9, "Quitte")
    MenuTitle("Fenetres")
    MenuTitle("Commandes")
      MenuItem(10, "1 étape")
      MenuItem(11, "Solution")
      MenuItem(12, "Teste")
    Chemin$ = "F:\Clef USB\Pure Basic\"
    UseJPEGImageDecoder()
    ;LoadImage(1, "Data\11.jpeg")
    ;Icone0 = LoadImage(2,"Data\EAK.ico")
    Mul.f = 21 : Xg = 0 : Yg = 0 : Rg = 0 : Ai.b = 0
    CouleurCadre = RGB(128, 64, 64)
    CouleurRouge = RGB(164, 90, 70)
    LoadFont (0, "Comic Sans MS", Mul * 1.5) 
    LoadFont (1, "Comic Sans MS", Mul * 0.6) 
    StartDrawing(WindowOutput())
    Restore Jeu04
    Gosub Quadrillage
    Gosub Tableaux
    Gosub Nombres
    Gosub Candidats
    Gosub Boucle
  EndIf
Return

Boucle: ;(
  Repeat
    ExamineKeyboard()
    If KeyboardPushed(#PB_Key_Escape) = 1 : Sortie = 1 : EndIf
    Evenement = WaitWindowEvent()
    If Evenement = #PB_Event_Gadget
      If IsGadget(0)
        Select EventGadgetID() 
          Case  0
          Default  
        EndSelect
      EndIf
    EndIf
    
    Select Evenement
      Case #PB_Event_Menu : Gadget = EventMenuID()-9
      Select EventMenuID()
        Case 00 : Restore Jeu00 : Gosub Quadrillage : Gosub Nombres : Gosub Candidats
        Case 01 : Restore Jeu01 : Gosub Quadrillage : Gosub Nombres : Gosub Candidats
        Case 02 : Restore Jeu02 : Gosub Quadrillage : Gosub Nombres : Gosub Candidats
        Case 03 : Restore Jeu03 : Gosub Quadrillage : Gosub Nombres : Gosub Candidats
        Case 04 : Restore Jeu04 : Gosub Quadrillage : Gosub Nombres : Gosub Candidats
        Case 05 : Restore Jeu05 : Gosub Quadrillage : Gosub Nombres : Gosub Candidats
        Case 06 : Restore Jeu06 : Gosub Quadrillage : Gosub Nombres : Gosub Candidats
        Case 07 : Restore Jeu07 : Gosub Quadrillage : Gosub Nombres : Gosub Candidats
        Case 09 : Sortie = 1 
        Case 10 : Passage = 1 : Gosub Solution
        Case 11 : Repeat : Passage = 1 : Gosub solution : Until Passage = 1
        Case 12 : Nom$ = "Irina & Marc " : adresse = @Nom$ : Texte$ = PeekS(adresse, 11)
          UseFont(1) : DrawingFont(FontID())
          Locate(Mul * 33,  0) : DrawText(Nom$ + Str(adresse))
          Locate(Mul * 33, 16) : DrawText(Texte$)
        Default
      EndSelect
        Case #PB_Event_CloseWindow : Sortie = 1 ; Until Asc(A$) = 27 Or A$ = "q"
    EndSelect
  Until Sortie = 1
Return

Quadrillage: ;(
  DrawingMode (%0001) : Xg = 3 : Yg = 3
  Box (Mul * Xg, Mul * Yg, Mul * 27 , Mul * 27, RGB(148, 168, 202))
	
  For Ai = 3 To 30 Step 3
    Line (Mul * Ai, Mul * Yg, 0, Mul * 27, CouleurCadre)
    Line (Mul * Xg, Mul * Ai, Mul * 27, 0, CouleurCadre)
  Next Ai
	
  For Ai = 3 To 30 Step 9
    Line (Mul * Ai - 1, Mul * Yg - 1, 0, Mul * 27 + 2, CouleurCadre)
    Line (Mul * Ai + 1, Mul * Yg - 1, 0, Mul * 27 + 2, CouleurCadre)
    Line (Mul * Xg - 1, Mul * Ai - 1, Mul * 27 + 2, 0, CouleurCadre)
    Line (Mul * Xg - 1, Mul * Ai + 1, Mul * 27 + 2, 0, CouleurCadre)
  Next Ai
	  
  DrawingMode (%0101)
  For Xg = 33 To 41 Step 3 : For Yg = 12 To 20 Step 3
    Box (Mul * Xg + 1, Mul * Yg + 1, Mul * 3 - 1, Mul * 3 - 1, CouleurCadre)
    Box (Mul * Xg    , Mul * Yg    , Mul * 3 + 1, Mul * 3 + 1, CouleurCadre)
    Box (Mul * Xg - 1, Mul * Yg - 1, Mul * 3 + 3, Mul * 3 + 3, CouleurCadre)
  Next Yg : Next Xg
  
  UseFont(0) : DrawingFont(FontID())
  Locate(Mul * 12, 0) : FrontColor(128, 64, 64) : DrawText("Soudokou")
Return

Tableaux: ;(
  Dim Nom(9, 9) : Dim Lig(9, 9) : Dim Col(9, 9)
  Dim Reg(9, 9) : Dim Can(9, 9, 9) : Dim Pla(9, 9)
Return

Nombres: ;(
  For Yg = 1 To 9 : For Xg = 1 To 9 : Nom(Xg, Yg) = 0 : Next Xg : Next Yg ;Arrayfill Nom() = 0
  UseFont(0) : DrawingFont(FontID()) : FrontColor(128, 32, 128) : Chiffres = 0
  For Yg = 1 To 9 : For Xg = 1 To 9 : Read Ai
    If Ai <> 0
      Nom(Xg, Yg) = Ai : Chiffres = Chiffres + 1
      Locate(Mul * (Xg * 3 + 11/12), Mul * (Yg * 3 + 1/12)) : DrawText(Str(Ai))
    EndIf
  Next Xg : Next Yg
  DrawingMode (%0001) : Box (Mul * 24, 0, Mul *  3, Mul * 3 - 1, RGB(198, 198, 198))
  DrawingMode (%0001) : Box (Mul * 33, 0, Mul * 10, Mul * 3 - 1, RGB(198, 198, 198))
  FrontColor(128, 64, 64) : Locate(Mul * (24 + 3/12), 0) : DrawText(Str(Chiffres))
  Etapes = 0
Return

DataSection ;(  
  Jeu00: ; 23 nombres 04 passages coince
  Data.b 0,0,0,0,0,0,3,0,0
  Data.b 0,0,0,9,0,0,0,7,0
  Data.b 0,0,9,0,5,0,0,8,1
  Data.b 4,1,0,0,0,6,0,0,0
  Data.b 0,6,0,0,7,0,0,2,0
  Data.b 0,0,0,2,0,0,0,5,4
  Data.b 1,4,0,0,3,0,2,0,0
  Data.b 0,8,0,0,0,2,0,0,0
  Data.b 0,0,5,0,0,0,0,0,0
  Jeu01: ; 27 nombres 07 passages
  Data.b 0,0,4,5,7,3,1,6,0
  Data.b 0,0,0,0,0,0,0,2,0
  Data.b 7,0,0,8,0,0,0,0,0
  Data.b 9,2,0,0,0,0,7,0,0
  Data.b 0,0,0,3,4,9,0,0,0
  Data.b 0,0,1,0,0,0,0,5,6
  Data.b 0,0,0,0,0,7,0,0,8
  Data.b 0,1,0,0,0,0,0,0,0
  Data.b 0,3,9,6,5,1,4,0,0
  Jeu02: ; 26 nombres 09 passages gagnant
  Data.b 0,3,6,0,0,0,7,4,0
  Data.b 0,0,0,6,0,5,0,0,0
  Data.b 2,0,0,0,0,0,0,0,9
  Data.b 7,0,5,0,0,0,2,0,1
  Data.b 0,0,0,2,0,9,0,0,0
  Data.b 9,0,2,0,0,0,4,0,3
  Data.b 3,0,0,0,0,0,0,0,2
  Data.b 0,0,0,9,0,8,0,0,0
  Data.b 0,7,1,0,0,0,9,5,0
  Jeu03: ; 24 nombres 10 passages
  Data.b 0,0,1,9,0,5,0,0,0
  Data.b 0,9,0,2,0,0,6,8,0
  Data.b 0,0,0,0,0,0,0,4,9
  Data.b 0,0,0,0,4,0,5,0,1
  Data.b 0,0,0,0,0,0,0,0,0
  Data.b 7,0,8,0,5,0,0,0,0
  Data.b 5,6,0,0,0,0,0,0,0
  Data.b 0,4,3,0,0,8,0,7,0
  Data.b 0,0,0,1,0,6,4,0,0
  Jeu04: ; 23 nombres 12 passages
  Data.b 0,0,1,9,0,5,0,0,0
  Data.b 0,9,0,2,0,0,6,8,0
  Data.b 0,0,0,0,0,0,0,4,0
  Data.b 0,0,0,0,4,0,5,0,1
  Data.b 0,0,0,0,0,0,0,0,0
  Data.b 7,0,8,0,5,0,0,0,0
  Data.b 5,6,0,0,0,0,0,0,0
  Data.b 0,4,3,0,0,8,0,7,0
  Data.b 0,0,0,1,0,6,4,0,0
  Jeu05: ; 32 nombres 05 passages
  Data.b 9,0,0,0,7,0,0,0,6
  Data.b 1,0,0,9,0,8,0,0,5
  Data.b 0,0,3,0,6,0,1,0,0
  Data.b 0,7,0,6,8,1,0,2,0
  Data.b 0,0,5,0,0,0,6,0,0
  Data.b 0,1,0,5,9,2,0,3,0
  Data.b 0,0,7,0,5,0,9,0,0
  Data.b 6,0,0,2,0,9,0,0,3
  Data.b 5,0,0,0,4,0,0,0,8
  Jeu06: ; 24 nombres 10 passages
  Data.b 0,0,8,0,0,0,0,1,3
  Data.b 0,0,0,6,0,0,5,0,0
  Data.b 1,0,7,0,9,0,0,0,0
  Data.b 0,5,0,0,0,3,0,6,9
  Data.b 0,0,0,0,0,0,0,0,0
  Data.b 3,2,0,4,0,0,0,7,0
  Data.b 0,0,0,0,5,0,8,0,4
  Data.b 0,0,5,0,0,6,0,0,0 
  Data.b 8,4,0,0,0,0,6,0,0
  Jeu07: ; 24 nombres 03 passages coince
  Data.b 0,0,0,0,0,9,0,0,0
  Data.b 0,3,0,0,1,0,0,0,6
  Data.b 0,9,0,2,8,0,4,0,0
  Data.b 0,5,9,0,0,6,0,0,3
  Data.b 0,0,0,0,0,0,0,0,0
  Data.b 8,0,0,7,0,0,9,4,0
  Data.b 0,0,4,0,2,5,0,3,0
  Data.b 2,0,0,0,7,0,0,5,0 
  Data.b 0,0,0,8,0,0,0,0,0
EndDataSection ;)

Candidats: ;(
  UseFont(1) : DrawingFont(FontID()) : FrontColor( 32, 96, 32) : DrawingMode (%0011) 
  For Yg = 1 To 9 : For Xg = 1 To 9 
    Lig(Xg, Yg) = 0 : Col(Xg, Yg) = 0 : Reg(Xg, Yg) = 0
  Next Xg : Next Yg
  For Yg = 1 To 9 : For Xg = 1 To 9 : For Rg = 1 To 9 
    Can(Xg, Yg, Rg) = 0
  Next Rg : Next Xg : Next Yg
  
  For Xg = 1 To 9 : For Yg = 1 To 9
    Rg = 1 + (Xg - 1) / 3 + (Yg - 1) / 3 * 3
    Ai = Nom(Xg, Yg)
    If Ai <> 0 : Col(Xg, Ai) = 1 : Lig(Yg, Ai) = 1 : Reg(Rg, Ai) = 1 : EndIf
  Next Yg : Next Xg
  
  For Xg = 1 To 9 : For Yg = 1 To 9
    Rg = 1 + (Xg - 1) / 3 + (Yg - 1) / 3 * 3
    If Nom (Xg, Yg) = 0
      Box(Mul * Xg * 3 + 2, Mul * Yg * 3 + 2, Mul * 3 - 3, Mul * 3 - 3, RGB(188, 168, 202))
      For Ai = 1 To 9
        If Col(Xg, Ai) = 0 And Lig(Yg, Ai) = 0 And Reg(Rg, Ai) = 0
          Can(Xg, Yg, Ai) = 1 : Xi = (Ai - 1) % 3 : Yi = (Ai - 1) / 3
          Locate(Mul * (Xg * 3 + Xi + 4/12 ), Mul * (Yg * 3 + Yi - 1/12)) : DrawText(Str(Ai))
        EndIf
      Next Ai
    EndIf
  Next Yg : Next Xg
  
  For Yg = 1 To 9 : For Xg = 1 To 9 
    Lig(Xg, Yg) = 0 : Col(Xg, Yg) = 0 : Reg(Xg, Yg) = 0 : Pla(Xg, Yg) = 0
  Next Xg : Next Yg

  For Yg = 1 To 9
    Box(Mul * 30 + 2, Mul * Yg * 3 + 2, Mul * 3 - 3, Mul * 3 - 3, RGB(148, 198, 202))
    For Ai = 1 To 9
      For Xg = 1 To 9
        If Can(Xg, Yg, Ai) = 1 : Lig(Yg, Ai) = Lig(Yg, Ai) + 1 : EndIf
      Next Xg
      Xi = (Ai - 1) % 3 : Yi = (Ai - 1) / 3
      If Lig(Yg, Ai) = 1 : FrontColor(224,  64,  64) : EndIf
      If Lig(Yg, Ai) = 2 : FrontColor(128,  64, 224) : EndIf
      If Lig(Yg, Ai) > 2 : FrontColor(128,  64,  64) : EndIf
      If Lig(Yg, Ai) <> 0
        Locate (Mul * (30 + Xi + 4/12), Mul * (Yg  * 3 + Yi - 1/12)) : DrawText(Str(Lig(Yg, Ai)))
      EndIf
  Next Ai : Next Yg

  For Xg = 1 To 9
    Box(Mul * Xg * 3 + 2, Mul * 30 + 2, Mul * 3 - 3, Mul * 3 - 3, RGB(148, 198, 202))
    For Ai = 1 To 9
      For Yg = 1 To 9
        If Can(Xg, Yg, Ai) = 1 : Col(Xg, Ai) = Col(Xg, Ai) + 1 : EndIf
      Next Yg
      Xi = (Ai - 1) % 3 : Yi = (Ai - 1) / 3
      If Col(Xg, Ai) = 1 : FrontColor(224,  64,  64) : EndIf
      If Col(Xg, Ai) = 2 : FrontColor(128,  64, 224) : EndIf
      If Col(Xg, Ai) > 2 : FrontColor(128,  64,  64) : EndIf
      If Col(Xg, Ai) <> 0
        Locate (Mul * (Xg * 3 + Xi + 4/12), Mul * (30 + Yi - 1/12)) : DrawText(Str(Col(Xg, Ai)))
      EndIf
  Next Ai : Next Xg

  For Rg = 1 To 9
    Xh = (Rg - 1) % 3 : Yh = (Rg - 1) / 3
    Box(Mul * (33 + Xh * 3) + 2, Mul * (12 + Yh * 3) + 2, Mul * 3 - 3, Mul * 3 - 3, RGB(148, 198, 202))
    For Ai = 1 To 9
      For Xg = Xh * 3 + 1 To Xh * 3 + 3
        For Yg = Yh * 3 + 1 To Yh * 3 + 3
          If Can(Xg, Yg, Ai) = 1 : Reg(Rg, Ai) = Reg(Rg, Ai) + 1 : EndIf
        Next Yg
      Next Xg
      Xi = (Ai - 1) % 3 : Yi = (Ai - 1) / 3
      If Reg(Rg, Ai) = 1 : FrontColor(224,  64,  64) : EndIf
      If Reg(Rg, Ai) = 2 : FrontColor(128,  64, 224) : EndIf
      If Reg(Rg, Ai) > 2 : FrontColor(128,  64,  64) : EndIf
      If Reg(Rg, Ai) <> 0
        Locate (Mul * (33 + Xh * 3 + Xi + 4/12), Mul * (12 + Yh * 3 + Yi - 1/12)) : DrawText(Str(Reg(Rg, Ai)))
      EndIf
    Next Ai
  Next Rg
  
  DrawingMode (%0111) :
  For Xg = 1 To 9 : For Yg = 1 To 9
    Rg = 1 + (Xg - 1)/3 + (Yg - 1)/3 * 3
    For Ai = 1 To 9
      If Can(Xg, Yg, Ai) = 1 : Pla(Xg, Yg) = Pla(Xg, Yg) + 1 : EndIf
    Next Ai
    For Ai = 1 To 9
      If Can(Xg, Yg, Ai) = 1
        If Lig(Yg, Ai) = 1 Or Col(Xg, Ai) = 1 Or Reg(Rg, Ai) = 1 Or Pla(Xg, Yg) = 1
          Xi = (Ai - 1) % 3 : Yi = (Ai - 1)/3
          If Lig(Yg, Ai) = 1 : Line(Mul * (Xg * 3 + Xi) + 2, Mul * (Yg * 3 + Yi + 1/2), Mul * (30 - (Xg * 3 + Xi)), 0, CouleurRouge) : EndIf
          If Col(Xg, Ai) = 1 : Line(Mul * (Xg * 3 + Xi + 1/2), Mul * (Yg * 3 + Yi) + 2, 0, Mul * (30 - (Yg * 3 + Yi)), CouleurRouge) : EndIf
          If Reg(Rg, Ai) = 1  
            Box (Mul * (Xg * 3 + Xi) + 2, Mul * (Yg * 3 + Yi) + 2, Mul - 3, Mul - 3, CouleurRouge)
          EndIf
          FrontColor(255, 240, 240)
          Locate(Mul * (Xg * 3 + Xi + 4/12), Mul * (Yg * 3 + Yi - 1/12)) : DrawText(Str(Ai))
        EndIf
      EndIf
    Next Ai
  Next Yg : Next Xg
Return

Solution: ;(
  DrawingMode (%0111) :
  For Xg = 1 To 9 : For Yg = 1 To 9 : For Ai = 1 To 9
    If Can(Xg, Yg, Ai) = 1
      Xi = (Ai - 1) % 3 : Yi = (Ai - 1)/3
      If Lig(Yg, Ai) = 1 : Line(Mul * (Xg * 3 + Xi) + 2, Mul * (Yg * 3 + Yi + 1/2), Mul * (30 - (Xg * 3 + Xi)), 0, RGB(224, 64, 64)) : EndIf
      If Col(Xg, Ai) = 1 : Line(Mul * (Xg * 3 + Xi + 1/2), Mul * (Yg * 3 + Yi) + 2, 0, Mul * (30 - (Yg * 3 + Yi)), RGB(224, 64, 64)) : EndIf
    EndIf
  Next Ai : Next Yg : Next Xg
    
  UseFont(0) : DrawingFont(FontID()) : DrawingMode (%0011)
  For Xg = 1 To 9 : For Yg = 1 To 9
    Rg = 1 + (Xg - 1) / 3 + (Yg - 1) / 3 * 3
    For Ai = 1 To 9
      If Can(Xg, Yg, Ai) = 1
        If Lig(Yg, Ai) = 1 Or Col(Xg, Ai) = 1 Or Reg(Rg, Ai) = 1 Or Pla(Xg, Yg) = 1
          Box(Mul * Xg * 3 + 2, Mul * Yg * 3 + 2, Mul * 3 - 3 , Mul * 3 - 3, RGB(148, 168, 202))
          Locate(Mul * (Xg * 3 + 11/12), Mul * (Yg * 3 + 1/12)) : DrawText(Str(Ai))
          Nom(Xg, Yg) = Ai : Passage = 0
        EndIf
      EndIf
    Next Ai
  Next Yg : Next Xg : Delay(500)
  
  If Passage = 0
    Etapes = Etapes + 1
    DrawingMode (%0001) : Box (Mul * 33, 0, Mul * 10, Mul * 3 - 1, RGB(198, 198, 198))
    UseFont(0) : DrawingFont(FontID()) : FrontColor(128, 64, 128)
    Locate(Mul * 33, 0) : DrawText(Str(Etapes) + " étapes")
  EndIf
  Gosub Candidats
Return
Dommage que le Figaro ait arrêté de doter sa grille diabolique d'un prix de 500€... Nous aurions pu faire des choux gras...

Publié : jeu. 19/janv./2006 17:26
par nico
C'est bien beau mais on ne peut pas jouer alors....

Publié : jeu. 19/janv./2006 20:21
par Frenchy Pilou
essaie celui-là : c'est un modèle dans le genre
http://angusj.com/sudoku/ 8)

Publié : jeu. 19/janv./2006 22:31
par comtois
pour un premier programme en PureBasic , il est coton.

Premier programme en purebasic, mais sûrement pas ton premier programme dans la vie :)
Tu codais avec quoi avant ?

Tu pourrais nous en dire plus sur l'algo utilisé ?

Publié : jeu. 19/janv./2006 23:11
par Frenchy Pilou
Vivement que l'on puisse rentrer sa propre grille !
8)

Moi les Sudokus j'aime bien tant qu'on peut trouver un chiffre par raisonnement

Dès l'instant où l'on arrive à une position où la seule façon de trouver est d'essayer plusieurs solutions ce n'est plus pour moi!
Et c'est, avis personnel, une mauvaise grille dans ce cas là ! :roll:

L'intérêt c'est de "raisonner" pas d'essayer de façon exaustive :)

Bon courage pour la suite 8)

Ps C'est très bien de montrer le chiffre "gagnant" avant son inscription
C'est une aide à la résolution quand on est dans la pannade !

Parce que souvent on est bloqué à cause d'une position que l'on n'a simplement pas vue !
A la limite c'est plutôt un jeu de perception visuelle que de casse tête :D


pss Suggestion de programme pour plus tard un "jeu de Go" 8)

http://purebasic.hmt-forum.com/viewtopi ... 04&start=0

et en "bas de page" http://purebasic.hmt-forum.com/viewtopi ... highlight=

Psss
Je me rappelle que Montreuil vers la Croix de Chaveaux était dans le temps un haut lieu de "l'informatique tout azimuts" :lol:

Publié : ven. 20/janv./2006 14:59
par SORLET
Nico, je m'adresse à une communauté de programmeurs. Si tu veux jouer, en l'état actuel du programme, il suffit de saisir ton jeu dans la section data, à la place des mes données.

Frenchy Pilou, merci pour ton sudoku... anglais, personne n'est parfait. Il ressemble furieusement au mien, sans m'être inspiré d'aucun exemple ! C'est sans doute, que le raisonnement permet d'aboutir aux mêmes solutions.

Ma méthode est tout le contraire du tâtonnement. Pour exaucer les souhaits d'un collègue j'ai voulu commencer par un programme de tâtonnage. Et si on essaye ce chiffre, comment on peut remplir les autres cases... Cela m'a paru tellement compliqué à programmer que j'ai très vite renoncé. Ma méthode est brutale, globale et analytique. bien que nous ne fonctionnions pas comme cela naturellement, faute d'une mémoire numérique, c'est la plus économe.

Pour le clin d'oeil à Montreuil, merci. Je pense que cette ville est toujours le berceau des jeux et des animations numériques. Plusieurs firmes y sont nées, Ubisoft et Emme je crois. Disney y avait ses studios. Mais je n'y suis pour rien, juré.

Comtois, c'est vrai, j'utilise le Basic depuis la préhistoire. En fait, j’ai écrit ce programme cet été en GFA Basic. Je l'ai donc transposé en Pure Basic, que je viens d'acquérir, pour m'initier. Cela doit se voir, non ?

J'ai commencé à coder, il y a loin. C'était sur la ZX Sinclair, si, si. Époque héroïque avec un Basic archaïque et le légendaire Z80 que j'ai fini par quasiment apprivoiser. Puis de Spectrum en Commodore je me suis retrouvé sur l'Atari 512Ste, 512Ko de mémoire vive, si, si ! Là, j'ai tâté au 68000. GFA proposait un Basic et assembleur machine. Une fois de plus j'ai choisi le mauvais cheval. Le Pc, Intel et Microsoft étaient incontournables.

J'espère que mon choix pour pure Basic est le bon. Ce que j'ai lu sur le forum m'encourage à penser que ce langage ne va pas disparaître comme les autres au bout de quelques années.

Pour l'algorithme, il n'y a rien de sorcier. J'ai simplement traduit mon raisonnement en Basic. Cela donne ça : Puisque, par construction, sur une ligne, il ne peut y avoir deux chiffres pareils, j'écarte dans toutes les cases vides d'une ligne les candidats égaux aux chiffres déjà présents sur la ligne. Je fais le même raisonnement pour les colonnes et pour les groupes de 9 cases, et à la fin il ne reste plus que les réels candidats. Ce sont les 9 petits chiffres dans les cases vides. Après c'est un jeu d'enfant, si dans une case, il n'y a qu'un seul candidat, c'est forcément le chiffre recherché, on l'adopte et on passe au balayage suivant.

En vrai, je sais qu'on peut encore éliminer plus de candidats, en raisonnant par groupe de trois lignes. Mais je suis toujours sur plusieurs programmes à la fois, ce qui fait que celui-ci reste en attente.


Je cherche toujours la solution au tri d'un tableau et au tri parallèle d'un autre tableau indexé au premier, siouplait.

Publié : ven. 20/janv./2006 17:14
par Frenchy Pilou
En anglais, en englais ?:lol:
Il y a quand même le choix de la langue quelque part dans les menus :D

Bon d'accord ils auraient pu se fouler pour le Help général aussi :roll:

Publié : ven. 20/janv./2006 17:37
par Frenchy Pilou
J'ai mis le problème du Monde d'hier :lol: (Difficile)
Après le Figaro cela fait une moyenne :lol:
Il cale à la 7ème !!! :D
Pour 22 nouveaux chiffres trouvés!


'Il faut évidemment faire (Fichier jeux 01) alors que dans les datas c'est écrit Jeux 00 :lol:

Code : Tout sélectionner

Jeu00: ; 25 nombres 07passages coince
Data.b 7,0,0,0,0,1,3,0,0
Data.b 0,4,2,0,0,0,0,0,0
Data.b 0,0,6,2,0,0,7,8,9
Data.b 0,0,0,0,0,0,6,0,0
Data.b 0,0,0,8,1,0,0,0,0
Data.b 1,2,0,0,0,7,0,3,0
Data.b 0,8,0,0,0,0,0,0,0
Data.b 0,0,0,0,5,0,9,0,1
Data.b 2,0,7,0,3,0,8,0,0
Il faut implémenter d'autres raisonnements plus vicieux :D