Arrangement, permutation, combinaison lettres Alphabet

Re Theze et H2so4,

Avec 26 lettres il n’est possible de former que 11,6 mots de 8 lettres en utilisant les paires qu une fois.

Bonjour,

Donc, si j'ai compris, c'est l'extraction des lettres de base qui est demandé ?

Peut être avec ça :

Sub Test()

    Dim Tbl() As String
    Dim TblFin() As String
    Dim I As Integer
    Dim J As Integer
    Dim K As Integer
    Dim L As Integer

    For I = 1 To 26

        ReDim Preserve Tbl(1 To I): Tbl(I) = Chr(I + 64)

    Next I

    L = 1: ReDim TblFin(1 To L)

    For I = 1 To UBound(Tbl): For J = I + 1 To UBound(Tbl)

        K = K + 1: Cells(K, 1).Value = Tbl(I) & Tbl(J)

        TblFin(L) = TblFin(L) & Tbl(I) & Tbl(J)

        If K Mod 28 = 0 Then L = L + 1: ReDim Preserve TblFin(1 To L)

    Next J, I

    'résultat en colonne B avec appel de la fonction Extraire pour récupérer les lettres de base
    For I = 1 To UBound(TblFin)

        Cells(I, 2).Value = Extraire(TblFin(I), 8)

    Next I

End Sub

Function Extraire(Chaine As String, Longueur As Integer) As String

    Dim Dico As Object
    Dim Cle
    Dim SousChaine As String
    Dim I As Integer

    Set Dico = CreateObject("Scripting.Dictionary")

    For I = 1 To Len(Chaine)

        Dico(Mid(Chaine, I, 1)) = ""
        If Dico.Count = Longueur Then Exit For

    Next I

    For Each Cle In Dico.Keys: SousChaine = SousChaine & Cle: Next Cle

    Extraire = SousChaine

End Function

Bonjour Theze,

C'est pas mal le but rechercher c'est ça mais malheureusement il manque beaucoup de couple.

ABCDEFGH

BFGHIJKL AZ

CKLMNOPQ AI couples manquants

DQRSTUVW AJ

EXYZFGHI AK

GMNOPQRS AL

HWXYZIJK AM

JRSTUVWX JUSQU A AZ

LQRSTUVW BM

NTUVWXYZ BN

QRSTUVWX BO

TYZUVWX B,,,,,, Z

ECT,,,

Tous les couples doivent etre utilisés

Bonjour Theze,

C'est pas mal le but rechercher c'est ça mais malheureusement il manque beaucoup de couple.

ABCDEFGH

BFGHIJKL AZ

CKLMNOPQ AI couples manquants

DQRSTUVW AJ

EXYZFGHI AK

GMNOPQRS AL

HWXYZIJK AM

JRSTUVWX JUSQU A AZ

LQRSTUVW BM

NTUVWXYZ BN

QRSTUVWX BO

TYZUVWX B,,,,,, Z

ECT,,,

Bonjour bidouille,

pour moi il est impossible d'utiliser tous les couples sans avoir de répétition de couples. Je répète donc ma question : comment doit-on gérer cette répétition ?

j'ai essayé d'imaginer des solutions possibles, mais je me heurte chaque fois à un problème.

1) le moins possible (il faut faire une recherche d'optimum et parcourir toutes les combinaisons possibles),

2) les répétitions ne sont pas un problème à condition d'utiliser tous les couples et de ne pas avoir 2 fois la même lettre dans un même mot, on aura plus de 11.6 mots et on se retrouvera in fine avec des couples qui ne permettront pas de former des mots de 8 lettres sans répétition de lettre dans le même mot.

3) la méthode à laquelle tu penses mais que je n'ai pas captée.

Bonjour h2so4,

je cite : pour moi il est impossible d'utiliser tous les couples sans avoir de répétition de couples. Je répète donc ma question : comment doit-on gérer cette répétition ?

La répépétition de lettre et donc de couple est interdite dans le meme mot (ça tu l'a compris)

La répétition de couple en générale ,ne devrait être pas possible si le couple est sorti de la liste après sont utilisation donc ne peut pas être réutilisé par conséquent.

La méthode à laquelle je pense s’approche de ta solution 2.

Je cite : 2) les répétitions ne sont pas un problème à condition d'utiliser tous les couples et de ne pas avoir 2 fois la même lettre dans un même mot, ok suis d'accord

on aura plus de 11.6 mots et on se retrouvera in fine avec des couples qui ne permettront pas de former des mots de 8 lettres sans répétition de lettre dans le même mot. c'est ici que sa coince

Envoie moi le code stp que je me rende compte

Si d'une série de x lettres je peux en sortir une liste d’éléments "couple" je devrai pouvoir faire l'inverse.

Cad de la liste d’éléments " couple" revenir à la série de x lettres , avec une fonction et non pas avec un assemblage des couples.

Je vous propose de procéder par étape.

Définir les éléments "couple" d'une série de X éléments: Visiblement c'est fait (même si je ne comprend pas comment sans la fonction "combin") l'explication viendra plus tard. je vous rappelle que X est une variable pour l'exemple c'est les 26 de l'alphabet mais ce pourrait : X= EXCLPRATIQU

Dés que le couple est utilisé il doit sortir de la liste.

il doit rejoindre 28 de ses copains dans un "mots" de 8 lettres (pour l'instant mais ce pourrait être de 3 à 12 lettres )

et normalement (par le calcul) il devrait y avoir 11.6 mots maximum.(avec notre exemple bien sur)

J'ai bien compris que la difficulté est de définir les conditions (en vba) d'assemblage des couples dans le mot.

Je pensais que avec "if" "or" then" "goto" etc.. cela suffirai ....

Est tu d'accord pour essayé de faire cela dans un dans un premier temps ?

re-bonjour,

et normalement (par le calcul) il devrait y avoir 11.6 mots maximum.(avec notre exemple bien sur)

pas si tu autorises plusieurs fois les mêmes couples ... et si tu ne l'autorises pas, pas possible de faire plus de 3 5/8 (ceux que j'ai mis dans un message précédent) et on ne peut pas utiliser tous les couples.

Bonjour h2so4,

Je ne vois pas comment tu peut affirmer cela

pas possible de faire plus de 3.25 (ceux que j'ai mis dans un message précédent) et on ne peut pas utiliser tous les couples.

Alors que dans le dernier code de Theze, que je salue au passage, il en sort 11 et tout les couples ne sont pas utilisés.

Voir le calcul dans un post plus avant.

Mathématiquement il y a une solution , maintenant peut être qu'avec VBA on ne le peux pas, mais ne dit pas "c'est impossible"

Si tu ne désire plus t'en occuper , je te remercie tout de même de ton aide.

Quelqu'un d'autre pour la suite ? Theze, Yvouille, MFerrand, James007 ?

Bonjour,

je n'ai pas envie d'abandonner, mais pour moi c'est impossible d'avoir plus de 3 mots de 8 lettres., je te mets au défi de trouver 4 séquences de 8 lettres parmi 26 en n'utilisant qu'une seule fois les couples selon les règles que tu as fixées, 8 lettres = 28 couples de lettres utilisés.

Bonjour,

Tu dis :

CKLMNOPQ AI couples manquants

Que vient faire AI dans ce bloc de 8 lettres CKLMNOPQ qui est issu de ce bloc de 28 paires ?

CKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZDEDFDGDHDIDJDKDLDMDNDODP

Bonjour Theze,

Ce sont les couples en bleu qui sont manquant , pas que Ai, et je n'ai pas lister tout les couples manquant mais seulement quelques un.

et j'ai mis un bout de ta liste en face pour que tous puissent comprendre ce dont il s'agit.

Bonjour,

pour essayer d'illustrer le problème que je rencontre et pourquoi je dis que c'est impossible, voir classeur en annexe j'ai listé pour chaque mot , les couples que l'on retrouve dans d'autres mots.

Bonjour h2so4,

aargh Oui, tu as raison, de plus qu'il manque beaucoup de couple : AZ,AI,AK,AL,.....et plein d'autre.

Si je puis me permettre (avec un P et non un F ) :

Comment sont listé les mots ?

Les couples sont ils extrait de l'ensemble des couples à chaque tirage ou sont il remis?

Ton code (comme celui de Theze) utilise plusieurs fois certaines paire et pas d'autres ! (AZ,AI,AK,AL,.....et plein d'autre ni sont pas)

Qu'est ce qui fait que ton code s’arrête a 11.607 mots ?

A moins que tu ne soit partis du code de Theze, que je salue au passage, pour illustré ?

Je suis en train d’essayer de lister à la main pour relever ton défis.

Pourrait on partir du fichier joint pour notre casse tête

19essais.xlsx (15.02 Ko)

svp ?

Ton code (comme celui de Theze) utilise plusieurs fois certaines paire et pas d'autres ! (AZ,AI,AK,AL,.....et plein d'autre ni sont pas)

Qu'est ce qui fait que ton code s’arrête a 11.607 mots ?

A moins que tu ne soit partis du code de Theze, que je salue au passage, pour illustré ?

je suis parti du code de Theze pour illustrer.

j'attends ta réponse à mon défi avant de continuer car je considère que pour le moment je suis bloqué

Bonjour à tous et à toutes,

Bonjour h2so4,

Bonjour Theze,

Défi relevé !

Non sans peine en fonction des "mots" de départ .

pour moi c'est impossible d'avoir plus de 3 mots de 8 lettres., je te mets au défi de trouver 4 séquences de 8 lettres parmi 26 en n'utilisant qu'une seule fois les couples selon les règles que tu as fixées, 8 lettres = 28 couples de lettres utilisés.

34defi-de-h2so41.zip (16.92 Ko)

Bonjour bidouille,

bravo !, tu m'épates.

ce que tu demandes, une recherche de minimum, implique d'essayer toutes les combinaisons possibles. C'est faisable si le nombre de couples n'est pas trop important. pour 325 couples, ca risque de durer longtemps.

Re bonjour H2s04,

Si on partait avec 16 éléments de départ ? 120 couples ? Ça pourrait être faisable d après toi ?

Si tu veux je clos ce problème puisqu’il n est pas soluble en l état, et j en ouvre un autre en révisant les données.

bonjour,

si mes calculs sont exacts le nombre de combinaisons de 120 couples en groupe de 8 lettres

120*119*118*117/fact(4) à une combinaison par milliseconde (estimation à confirmer)= entre 2 et 3 heures de calcul.

je crois qu'il serait bon de refixer les contraintes.

concernant le défi,

je suis parti de l'hypothèse que pour n'utiliser qu'une seule fois un couple

pour le premier mot il fallait choisir 8 lettres parmi les 26

pour le deuxième, 8 lettres parmi les 18 restantes ou 1 lettre du mot précédent et 7 lettres parmi les 18 restantes

pour le troisième mot, même chose 8 ou 7 mais parmi les 10 ou 11 restantes

pour le quatrième mot, 1 lettre de chaque mot précédent plus les lettres qui restent.

ce qui donnait 8 lettres + 8 lettres + 8 lettres (+ 2 lettres restantes +3 lettres prises aux mots précédents) 3 mots et 5 lettres

ou

8 lettres + 7 lettres + 7 lettres + (4 lettres restantes + 3 lettres prises aux mots précédents) 3 mots et 7 lettres

j'ai omis la possibilité que tu as trouvée (encore bravo)

1er mot 8 lettres

2eme mot 1 lettre du mot précédent + 7 lettres

3 ème mot 1 lettre du premier mot + 1 lettre du deuxième + 6 lettres

4 ème mot lettres restantes (5 lettres + 3 lettres prises aux mots précédents) 4 mots tout juste et il n'y pas moyen de faire mieux (enfin je pense, je me méfie ...)

ABCDEFGH AIJKLMNO BIPQRSTU CJPVWXYZ

Bonjour,

Une piste, deux fonctions, une pour extraire les paires qui constitues le mot et l'autre pour reconstituer le mot. Effectivement, si aucune lettre ne doit être répétée, il ne peut y avoir, comme le dit justement h2so4, que 3,25 mot de 8 lettres !

Pour le test, résultat en colonne A :

Sub TesterMot()

    Dim Tbl() As String
    Dim Mot As String
    Dim I As Integer

    Mot = "ACIMPRUZ"

    Tbl() = CreerPaires(Mot)

    For I = 1 To UBound(Tbl): Cells(I, 1).Value = Tbl(I): Next I

    Cells(I + 1, 1).Value = TrouverMot(Tbl())

End Sub

Function TrouverMot(Tbl() As String) As String

    Dim Dico As Object
    Dim Cle
    Dim I As Integer
    Dim J As Integer

    Set Dico = CreateObject("Scripting.Dictionary")

    For I = 1 To UBound(Tbl)

        For J = 1 To Len(Tbl(I))
            Dico(Mid(Tbl(I), J, 1)) = ""

    Next J, I

    For Each Cle In Dico.Keys: TrouverMot = TrouverMot & Cle: Next Cle

End Function

Function CreerPaires(Mot As String) As String()

    Dim Tbl() As String
    Dim I As Integer
    Dim J As Integer
    Dim K As Integer

    For I = 1 To Len(Mot): For J = I + 1 To Len(Mot)

            K = K + 1: ReDim Preserve Tbl(1 To K)
            Tbl(K) = Mid(Mot, I, 1) & Mid(Mot, J, 1)

    Next J, I

    CreerPaires = Tbl()

End Function

Bonjour Theze,

Merci d’être encore sur le coup.

Tu as vu dans mes post que je réussi à faire 4 mot complet ?

Alors comme je le disais à h2so4 je vais clore le sujet et en ouvrir d'autre avec des demandes spécifiques step by step.

Rechercher des sujets similaires à "arrangement permutation combinaison lettres alphabet"