![Logiciels Logiciels](images/news/categories/application.png)
Qui n'a pas déjà râlé en ne trouvant pas le compte rond du jeu des chiffres et des lettres? Plus besoin d'y passer des nuits blanches, un programme sous licence GPL vous trouvera la solution.
Accessoirement vous pourrez également jouer et essayer d'exercer vos talents en essayant de résoudre les énigmes par vous même. Bon amusement!
![](images/base_document.png)
![Français Français](images/fr_flag.png)
![](images/base_document.png)
![](images/news_comments.png)
cauet:
Notre logiciel libre du lundi, Kistune!
C'est très très très très utile
![:petrus: :petrus:](images/smileys/petrus.gif)
Vector:
Notre logiciel libre du lundi, Kistune!
ha wai ... en panne d'inspiration là ?
![:wink: :wink:](images/smileys/wink.gif)
gizmo:
Notre logiciel libre du lundi, Kistune!
Nan, c'est juste le dernier soft de framasoft, comme la plupart des lundi, pour ceux qui n'avaient pas remarque
![:oh: :oh:](images/smileys/oh.gif)
Nymouas:
Notre logiciel libre du lundi, Kistune!
Salut,
Bof, bof, je suis pas programmeur de métier ... mais j'ai fait un programme du genre (pour résoudre le compte) il y a un peu plus de 7ans pour comprendre le backtracking récursif d'un de mes cours ...
Pour info, le principe est très simple, il suffit de prendre un vecteur de taille n contenant tous les chiffres (n=6, dans notre cas) pour commencer et faire toutes les opérations +-*/ entre le premier élément et les n-1 autres. A chaque opération entre deux nombres, on construit un nouveau vecteur de taille n-1 avec le résultat de l'opération et on recopie les nombres non utilisés. Ensuite, on réapplique le même algo avec ce nouveau vecteur (rappel de la fonction sur le vecteur de taille n-1). On s'arrête qd on obtient un vecteur de taille 1 ou si on a trouvé la solution (et dans ce cas on dépile les opérations qu'on aura préalablement sauvegardé à chaque étape). En résumé, la fonction principale fait moins de cent lignes...
Si je le retrouve, je le mettrai sur un site ainsi que la source (attention il fonctionnait bien mais avait un bug volontaire de montrer une opération intermédiaire dont le résultat n'était pas forcément utilisé)
@++
Bof, bof, je suis pas programmeur de métier ... mais j'ai fait un programme du genre (pour résoudre le compte) il y a un peu plus de 7ans pour comprendre le backtracking récursif d'un de mes cours ...
Pour info, le principe est très simple, il suffit de prendre un vecteur de taille n contenant tous les chiffres (n=6, dans notre cas) pour commencer et faire toutes les opérations +-*/ entre le premier élément et les n-1 autres. A chaque opération entre deux nombres, on construit un nouveau vecteur de taille n-1 avec le résultat de l'opération et on recopie les nombres non utilisés. Ensuite, on réapplique le même algo avec ce nouveau vecteur (rappel de la fonction sur le vecteur de taille n-1). On s'arrête qd on obtient un vecteur de taille 1 ou si on a trouvé la solution (et dans ce cas on dépile les opérations qu'on aura préalablement sauvegardé à chaque étape). En résumé, la fonction principale fait moins de cent lignes...
Si je le retrouve, je le mettrai sur un site ainsi que la source (attention il fonctionnait bien mais avait un bug volontaire de montrer une opération intermédiaire dont le résultat n'était pas forcément utilisé)
@++
zion:
Notre logiciel libre du lundi, Kistune!
Soyez malade, bougez vous le cul pour faire des news quand même et soyez remerciés
La prochaine fois je resterai dans mon lit
![:oh: :oh:](images/smileys/oh.gif)
La prochaine fois je resterai dans mon lit
![:itm: :itm:](images/smileys/itm.gif)
cauet:
Notre logiciel libre du lundi, Kistune!
![:calin: :calin:](images/smileys/calin.gif)
Nymouas:
Notre logiciel libre du lundi, Kistune!
![:oh: :oh:](images/smileys/oh.gif)
![:wink: :wink:](images/smileys/wink.gif)
Bon rétablissement,
++
zion:
Notre logiciel libre du lundi, Kistune!
Nymouas> C'était pas pour toi, c'était pour gizmo
Mais bon je sais d'où ça vient
J'avais aussi codé un petit truc équivalent en TP7 à l'époque... et en Delphi par après pour m'amuser...
Ca date d'il y a quelques années (6 ou 7 ans
), j'ose même pas relire le source tellement il doit faire peur... mais il fonctionnait ... donc le voila
![:oh: :oh:](images/smileys/oh.gif)
Mais bon je sais d'où ça vient
![:ddr555: :ddr555:](images/smileys/ddr555.gif)
J'avais aussi codé un petit truc équivalent en TP7 à l'époque... et en Delphi par après pour m'amuser...
Ca date d'il y a quelques années (6 ou 7 ans
![:oh: :oh:](images/smileys/oh.gif)
![:ddr555: :ddr555:](images/smileys/ddr555.gif)
- unit Unit1;
- interface
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls, Spin;
- type
- TForm1 = class(TForm)
- SpinEdit1: TSpinEdit;
- SpinEdit2: TSpinEdit;
- SpinEdit3: TSpinEdit;
- SpinEdit4: TSpinEdit;
- SpinEdit5: TSpinEdit;
- SpinEdit6: TSpinEdit;
- Memo1: TMemo;
- SpinEdit7: TSpinEdit;
- Button1: TButton;
- procedure SpinEdit7Change(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.DFM}
- procedure TForm1.SpinEdit7Change(Sender: TObject);
- var
- Chiffres : array[0..5] of integer;
- total,res,i,j:integer;
- ChemCourant,Chemin : TStringList;
- termine:boolean;
- procedure Calculer(Count:integer);
- var
- i,j,tmp,tmp2:integer;
- begin
- if termine then
- exit;
- for i:=0 to Count-1 do
- if abs(total-Chiffres[ i ]) < abs(total-res) then
- begin
- res:=Chiffres [i ];
- Chemin.Text := ChemCourant.Text;
- if res = total then
- termine :=true;
- end;
- for j:=Count-2 downto 0 do
- begin
- tmp:=Chiffres[ Count-1 ];
- tmp2:=Chiffres[ j ];
- //Addition
- ChemCourant.Add(IntToStr(tmp)+' + '+IntToStr(tmp2)+' = '+IntToStr(tmp+tmp2));
- Chiffres[ j ]:=tmp+tmp2;
- Calculer(Count-1);
- ChemCourant.Delete(ChemCourant.Count-1);
- //Soustraction
- if (tmp>tmp2) then
- begin
- Chiffres[ j ]:=tmp-tmp2;
- ChemCourant.Add(IntToStr(tmp)+' - '+IntToStr(tmp2)+' = '+IntToStr(tmp-tmp2));
- end
- else
- begin
- Chiffres[ j ]:=tmp2-tmp;
- ChemCourant.Add(IntToStr(tmp2)+' - '+IntToStr(tmp)+' = '+IntToStr(tmp2-tmp));
- end;
- Calculer(Count-1);
- ChemCourant.Delete(ChemCourant.Count-1);
- //Multiplication
- Chiffres[ j ]:=tmp*tmp2;
- ChemCourant.Add(IntToStr(tmp2)+' * '+IntToStr(tmp)+' = '+IntToStr(tmp2*tmp));
- Calculer(Count-1);
- ChemCourant.Delete(ChemCourant.Count-1);
- //Division
- if (tmp2<>0)and(tmp mod tmp2=0) then
- begin
- Chiffres[j]:=tmp div tmp2;
- ChemCourant.Add(IntToStr(tmp)+' / '+IntToStr(tmp2)+' = '+IntToStr(tmp div tmp2));
- Calculer(Count-1);
- ChemCourant.Delete(ChemCourant.Count-1);
- end;
- if (tmp<>0)and(tmp2 mod tmp=0) then
- begin
- Chiffres[j]:=tmp2 div tmp;
- ChemCourant.Add(IntToStr(tmp2)+' / '+IntToStr(tmp)+' = '+IntToStr(tmp2 div tmp));
- Calculer(Count-1);
- ChemCourant.Delete(ChemCourant.Count-1);
- end;
- Chiffres[ j ]:=tmp2;
- end;
- end;
- begin
- //Calculer le resultat
- j:=0;
- for i:=0 to self.ComponentCount-1 do
- if (self.Components[ i ] is TSpinEdit)and(j<6) then
- begin
- Chiffres[ j ]:=(self.Components[ i ] as TSpinEdit).Value;
- inc(j);
- end;
- total:=self.SpinEdit7.Value;
- res:=0;
- Chemin:=TStringList.Create;
- ChemCourant:=TStringList.Create;
- termine:=false;
- Calculer(6);
- self.Memo1.Lines.Text := Chemin.Text;
- self.Memo1.Lines.Add('Resultat : '+IntToStr(res));
- Chemin.Free;ChemCourant.Free;
- end;
- end.
gizmo:
Notre logiciel libre du lundi, Kistune!
gni? qu'est-ce que j'ai encore fait moi?
![:confused: :confused:](images/smileys/confused.gif)