|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Arthur CousseauInscription : octobre 2011 Messages : 23 ![]() |
Bonjour, bonsoir
Voilà, je viens de voir un exercice dans le journal qui normalement requiert une bonne connaissance de la langue française pour être résolu. Je vous poste le principe + Un exemple ( les lettres à droite ) Vous l'aurez compris, le but est de placer dans la case correspondante une des 3 lettres du mot correspondant à son matricule : pour la 1ère case, il faut mettre une lettre du premier triplet, la 2e case une lettre du second triplet, etc... Je me demandais simplement s'il était possible de créer un algorithme pour trouver la solution, je pensais à un truc un peu "bourrin" où le programme afficherait la liste des combinaisons possibles. Mais même ça, je n'y arrive pas |
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : avril 2002 Messages : 2 134 ![]() |
Il faut analyser le problème calmement. Finalement le jeu consiste à prendre une lettre du groupe 1, puis une du groupe 2 puis une du groupe 3. A partir de là, 3 lettres sont choisies. Si je comprends bien, au tour d'après, on choisit une lettre du groupe 1 qui n'a pas été déjà choisie, pareil pour le groupe 2, pareil pour le groupe 3. On boucle au total 3 fois.
Evidemment, pour avoir un algorithme optimisé, on ne fera pas appel à randomize pour choisir quelle lettre prendre. Pour simplifier un peu la chose on peut aussi considérer que les 3 cases qui doivent être remplies par le groupe 1 sont consécutives, idem pour le groupe 2 et le groupe 3. Autant dire, ca revient à afficher les 6 combinaisons possibles pour chaque groupe (au final, si je me suis pas gouré Pour les boucles, il faut à tout pris essayer de minimiser leur nombre, et éviter qu'elles s'imbriquent... Une solution comme je viens de l'exposer, serait de calculer toutes les combinaisons de 3 cases du groupe1, et du groupe2 et du groupe 3, puis les "réassembler" dans une boucle bête. En espérant que ca t'aide un peu !
__________________
wormful_sickfoot - Rédacteur et Modérateur Pascal |
|
|
00
|
|
|
#3 |
|
Expert Confirmé Sénior
![]() ![]() Paul TOTHFreelance Inscription : novembre 2002 Messages : 3 411 ![]() |
le problème majeur me semble être d'identifier la réponse
avec un dictionnaire ça devient par contre très simple, il faut un mot de 6 lettres qui commence par l'une des lettre du 1, puis l'une des lettre du 2...en fait on doit très vite trouver la solution. après pour faire défiler les combinaison c'est simple, prenons un exemple plus simple 1 ABC 2 DEF 3 GHI premières combinaisons ADGADGADG ADGADGADH ADGADGADI ADGADGAEG en fait c'est un comptage en base 3 qui utilise des lettres 0000000000 0000000001 0000000002 0000000010 0000000011 0000000012 0000000100 etc... soit 3^9 possibilités (19683)
__________________
Developpez.com: Mes articles Entreprise: Execute SARL Produits : UPnP, RemoteOffice sous Delphi Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5% |
|
10
|
|
|
#4 |
|
Membre expérimenté
![]() |
La technique des combinaison, qui vient en premier n'est pas très efficace. Elle est assez simple à programmer comme l'explique Paul TOTH. Il faut utiliser un seul compteur qui va de 0 à 3^9 et l'écrire en base 3. Mais ça ne la rend pas efficace.
La solution consistant à charger un dictionnaire des mots de 9 lettres et à procéder par élagage serait effectivement bien plus efficace. Le nombre d'itération serait alors très inférieur à 9n (ou n est le nombre de mots de 9 lettres dans le dictionnaire). Bien plus rapide 3^9n (génération de tout les cas, et comparaison dans la liste des mots de 9 lettres). |
|
|
10
|
|
|
#5 |
|
Invité régulier
![]() Arthur CousseauInscription : octobre 2011 Messages : 23 ![]() |
Hum...
Alors dans ce cas-là je suis désolé, mais ça ne relève pas de mes compétences Je pensais que ce serait plus simple... :/ |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com