Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Le problème des 8 dames | |
| | Auteur | Message |
---|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Le problème des 8 dames Jeu 10 Mai 2012 - 15:21 | |
| Salut à tous Au début des années 1980, j’ai trouvé (je ne me rappelle plus dans quel magasine ou quel live) un algorithme qui permettait de trouver la solution à un très vieux problème : celui des 8 dames qui s’énonce ainsi : Sur un échiquier de 8 X 8 cases, de combien de façons peut-on disposer 8 dames sur cet échiquier, de telle sorte qu’aucune des 8 dames ne soit menacée par l’une quelconque des 7 autres dames ? C’est-à-dire telle qu’il y ait une dame et une seule dans chaque ligne, dans chaque colonne et dans chaque diagonale. Ce problème a été posé au milieu du XIXème siècle. A cette époque, même le grand génie Carl Friedrich Gauss (mathématicien, astronome et physicien allemand) ne trouva « que » 72 solutions, alors qu’il existe en réalité 92 ! J’ai trouvé cet algorithme génial de part sa concision. Je l’ai transformé en un programme Basic qui tournait sur mon Apple II dont j’étais fier. C’était, dis-je, au début des années 1980 (A cette époque, JICEHEL était en CM1 ou peut-être en CM2 ! En fait, à quelle classe étais-tu ?). Ces derniers jours, en cherchant un papier dans mes archives, j’ai trouvé dans un grand cahier où je notais mes programmes, le programme des 8 dames (à cette époque je ne possédais pas d’imprimante). Je l’ai donc adapté en PANORAMIC et il tourne correct. En réfléchissant maintenant un peu (et même beaucoup) à ce genre de problème, il m’a semblé qu’il n’est pas aussi simple que l'on pense. Alors mon programme (dont l’algorithme, je précise bien, n’est pas le mien) ne sera mis sur le Forum que dans 24 heures environ. Je laisse donc le temps à ceux qui veulent y réfléchir. C’est un bon exercice de programmation. Vous trouverez certainement des solutions inédites (ou même tordues!). Il ne s’agit nullement d’un concours de programmation. Il n’y aura aucun prix si ce n’est la satisfaction d’avoir résolu un problème ! Et c’est déjà beaucoup !!!!! ALORS A VOS CLAVIERS !!!! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Le problème des 8 dames Jeu 10 Mai 2012 - 16:19 | |
| Je ne participerais pas, ma femme a perdu son grand-père hier et nous partons en Bretagne demain pour l'enterrement ce week-end ... Désolé ... (Mais de toute façon, il aurait fallu que je réfléchisse et ce n'était pas gagné ) | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Le problème des 8 dames Jeu 10 Mai 2012 - 16:40 | |
| Je suis vraiment désolé, Jicehel ! Toutes mes condoléances!
| |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Le problème des 8 dames Ven 11 Mai 2012 - 11:02 | |
| Très intérressant ce problèmes des 8 dames! Bon j'ai pas vraiment envi de me casser le ciboulot, alors je viens de faire un tour vite fait sur google en tapant dans le moteur de recherche "les 8 dames" et je me suis retrouvé sur wikipédia, qui dit bien qu'il y a 92 solutions au problème et que le génial Gauss s'était attelé au problème. Un passage nous éclaire sur la façon de procéder en informatique et que l'algorithme de la programmation par contraintes serait le mieux adapté au problème. Par contre j'ai été surpris de voir qu'il existait également d'autres problèmes qui me paraissent aussi intéressant: les 32 cavaliers, les 14 fous, les 16 rois et aussi les 9 dames avec 1 pion! Je crois qu'il y a matière à cogiter et à attrapper un mal de crâne épouvantable là! A bientôt | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Le problème des 8 dames Ven 11 Mai 2012 - 12:31 | |
| La programmation par contraintes, je ne la connais pas ! Le programme que je posterais ce soir, utilise un algorithme étonnamment simple et que je trouve génial ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Le problème des 8 dames Ven 11 Mai 2012 - 18:19 | |
| Salut tout le monde. Comme promis, je publie mon programme des 8 dames. Les solutions affichées à l’écran sont sous forme de 8 chiffres (de 1 à 8 ). Exemple : la solution 15863724. Cette solution est représentée par la permutation (1, 5, 8, 6, 3, 7, 2,4). C’est sous cette forme que les solutions sont affichées. Ceci doit être interprété ainsi : Chaque chiffre représente la ligne où une dame se trouve, la colonne étant le numéro d’ordre dans la permutation. C'est-à-dire (dans l’ordre des colonnes 1, 2, 3, 4, 5, 6, 7,8 ), les dames sont placées en Ligne 1 Ligne 5 Ligne 8 Ligne 6 Ligne 3 Ligne 7 Ligne 2 Ligne 4. Il ya, en tout, 92 solutions. On remarque que 2 solutions sont équivalentes si elles se déduisent l’une de l’autre par rotation ou par symétrie. Le groupe des isométries du carré a 8 éléments. Donc les solutions sont, en principe groupées par familles de 8 solutions équivalentes. Il ya ainsi 12 familles de solutions. Or, 12 x 8 = 96 et non 92 ! Cela résulte d’une solution qui n’a que 4 solutions équivalentes. Le compte est bon ! - Code:
-
' ****************************************************************************** ' ' Le problème des huit dames ' ' ******************************************************************************
' Sur un échiquier 8 X 8, placer 8 dames telles qu'aucune ne puisse être prise ' par l'une des 7 autes c.a.d. telle qu'il y ait au plus une dame dans chaque ' ligne, dans chaque colonne et dans chaque diagonale.
' ******************************************************************************
' Les solutions sont affichées comme suit: 15863724 ' Cette façon doit être interprétée ainsi
' Colonne i ..... 1 2 3 4 5 6 7 8 ' --------------- ' Ligne dame(i).. 1 5 8 6 3 7 2 4 ' ' C.A.D une dame en ligne 1,colonne 1; une dame en ligne 5, colonne 2; ' une dame en ligne 8, colonne 3; une dame en ligne, 6 colonne 4; etc..
' ****************************************************************************** ' Pour comprendre l'algorithme utilisé:
' Comment peut-on exprimer que les dames des colonnes i et j ne se menacent pas? ' Deux dames sont dans la même ligne si dame(i) = dame(j). ' Elles sont sur la même diagonale si la droite qui les joint a pour coefficient ' directeur +1 ou -1 c.a.d : (dame(i) - dame(j)) / (i-j) = + ou - 1 ' c.a.d, comme i > j, abs(dame(i) - dame(j)) = i - j
' Ces 2 constatations simples mais géniales, donne le programme ultra bref qui ' règle un problème que même Gauss n'a pas su maîtriser entièrement!
' ******************************************************************************
dim i,j,k,dame(8),solution$ label deplacer_dame memo 1 : full_space 1 : print_target_is 1 caption 0 , " LE PROBLEME DES HUIT DAMES"+string$(50," ")+"PAR PAPYDALL" width 0,900 : height 0, 600 top 1,10:left 1, 150 :width 1,612 : height 1, 500 font_bold 1 : font_color 1,255,0,0 print : print :print print string$(35," ") + "!!! VEUILLEZ PATIENTER, JE CALCULE !!!"
for i = 1 to 8 : ' placer les dames dame(i) = 1 : ' placer la ième dame dans la ligne 1 while dame(i) <= 8 : ' placer_dame if i > 1 for j = 1 to i-1 : ' verifier si cette dame est libre de toute menace ' si elle est menacée, on va à deplacer_dame et la dame monte d'une case if dame(i) = dame(j) or abs(dame(i)-dame(j)) = (i-j) then goto deplacer_dame next j end_if next i
for k = 1 to 8 : solution$ = solution$ + str$(dame(k)) : next k solution$ = solution$ + string$(5," ") i = i-1 deplacer_dame: repeat dame(i) = dame(i)+1 : ' la dame monte d'une case end_while : ' la dame est encore sur l'échiquier? si oui on revient à placer_dame i = i-1 :' si non vérifier si une dame précédente existe ' si oui la faire avancer d'une case vers le haut until i = 0 ' **************** AFFICHAGE DE LA SOLUTION ********************************** clear 1 : print : print print " Voici les solutions : " : print print " Par exemple la solution 15863724 est représentée par la permutation (1,5,8,6,3,7,2,4)" print " Cette façon d'afficher les résultats doit être interprétée comme suit :" : print print " Chaque élement de la permutation représente la ligne où une dame se trouve." print " Le rang de chaque élement représente la colonne." : print print " Dans l'exemple ci-haut, on a donc:" : print print " une dame dans la 1ère colonne, 1ère ligne" print " une dame dans la 2ème colonne, 5ème ligne" print " une dame dans la 3ème colonne, 8ème ligne" print " une dame dans la 4ème colonne, 6ème ligne" print " une dame dans la 5ème colonne, 3ème ligne" print " une dame dans la 6ème colonne, 7ème ligne" print " une dame dans la 7ème colonne, 2ème ligne" print " une dame dans la 8ème colonne, 4ème ligne" : print
font_color 1, 0,0,255
solution$ = string$(2, " ") + solution$
print : print : print solution$ print print " !!! I L Y A E N T O U T 9 2 S O L U T I O N S !!!" end ' **********************************************************************
PS: C’est bizarre. Les espaces ne sont pas correctement transmis!! Si l'affichage n'est pas bien aligné,vérifiez qu’il y a bien 5 espaces en lignes 61 et 2 espaces en ligne 90 Programme édité une foisA+
Dernière édition par papydall le Mer 16 Mai 2012 - 19:20, édité 2 fois | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Le problème des 8 dames Ven 11 Mai 2012 - 19:10 | |
| Très intéressant ! Je vais regarder ça en détail.
En effet, des espaces multiples ne sont PAS transmis correctement dans le forum. J'ai eu me même problème avec mes modules de justification et cadrage (mini-facture, liste des polices fixes, valeurs de pi cadrées gauche/droite/centrée). Je crois qu'il vaut mieux écrire string$(5," ") au lieu de mettre 5 espaces entre guillemets. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Le problème des 8 dames Ven 11 Mai 2012 - 19:52 | |
| | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Le problème des 8 dames Mar 15 Mai 2012 - 13:34 | |
| Escuse moi pour le délai Papydall, ça m'avait échappé à mon retour ... sinon, je crois que la ligne - Code:
-
print " est représentée par la permutation (1,5,8,6,3,7,2,4)" : print
est un vestige de la mise au point / mise en forme du source... Tu ne veux pas faire une représentation graphique de la solution ? Un petit jeu de dame avec intellignece artificielle pour jouer contre l'ordi à la façon Bignono ? Bon, en tout cas, c'était un joli petit problème | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Le problème des 8 dames Mar 15 Mai 2012 - 17:51 | |
| Le problème des 8 dames... sans moi, j'ai déjà assez de problèmes avec une seule. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Le problème des 8 dames Mar 15 Mai 2012 - 18:20 | |
| ^^ (Moi chez moi 1 femme, 2 filles et 3 chattes ... tu imagines .. déjà 6 sur les 8 ...) | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Le problème des 8 dames Mer 16 Mai 2012 - 19:19 | |
| Salut tout le monde. Quant à moi (et pas tous chez moi !), j’ai une femme, un fils, deux filles, (tous mariés), deux petites-filles, deux petit-fils et j’attends le tout dernier petit-fils dans quelques jours. Quand ile se réunissent tous, ça fait du monde et j’éprouve un immense bonheur ! Avouez que les femmes sont un don du ciel ! Même quand on a des petits problèmes avec. Mais qui ose prétendre qu’il n’en a pas eut avec la sienne ! Pour le problème des 8 dames, si je dois réfléchir pour trouver un algorithme pour le résoudre, je pense qu’il me poserait plus de problèmes qu’avec la mienne ! @Jicehel C’est vrai , la ligne ‘ PRINT « est représentée par la permutation (1,5,8,6,3,7,2,4)" : PRINT’ est un vestige de la mise au point / mise en forme du source... C'est corrigé. - Citation :
Tu ne veux pas faire une représentation graphique de la solution ? Un petit jeu de dame avec intellignece artificielle pour jouer contre l'ordi à la façon Bignono ?
Tant que nous y sommes, ça sera un excellent exercice pour que tu nous exhibe tes immenses talents de programmeur ! Sérieusement, je t’invite donc à t’y mettre ! Voila, j’ai inversé les rôles ! | |
| | | Contenu sponsorisé
| Sujet: Re: Le problème des 8 dames | |
| |
| | | | Le problème des 8 dames | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |