OVH Cloud OVH Cloud

Anagramme

2 réponses
Avatar
Dangaut
Bonjour,

J'ai une série de lettres dans une cellule A1

Comment trouver tous les mots composables à partir de cette série? (en
liaison avec le dictionnaire).
En bref: comment trouver les anagrammes?

Merci aux experts!

2 réponses

Avatar
Pierre Fauconnier
Bonjour

Je propose la démarche suivante, qui utilise un peu de VBA. Le principe est
de donner un poids à chaque lettre, en utilisant les puissances de 2.

Ainsi,
A vaut 2^1 ( soit le code Ascii de A - 64)
B vaut 2^2 ( soit le code Ascci de B - 64)
C vaut 2^3
...
Z vaut 2^26

pour cela, je propose la fonction perso suivante

Function Poids_Mot(Mot As String) As Long
Dim Compteur As Integer

Mot = UCase(Mot)
For Compteur = 1 To Len(Mot)
Poids_Mot = Poids_Mot + (2 ^ (Asc(Mid(Mot, Compteur, 1)) - 64))
Next Compteur
End Function

Après, on travaille dans Excel.

Dans la feuille contenant les mots à utiliser, créer la liste en A. En B,
attribuer le poids de chaque mot en utilisant la fonction perso.

Pour retrouver les anagrammes d'un mot dans la liste, il suffit de connaître
le poids de ce mot et d'utiliser un filtre automatique sur la colonne des
poids.

Voir http://cjoint.com/?lvnwRlCxHZ pour un exemple

Cela convient-t'il?


--
Pierre Fauconnier ()
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci




"Dangaut" a écrit dans le message de news:

Bonjour,

J'ai une série de lettres dans une cellule A1

Comment trouver tous les mots composables à partir de cette série? (en
liaison avec le dictionnaire).
En bref: comment trouver les anagrammes?

Merci aux experts!




Avatar
Modeste
Bonsour®
Dangaut wrote:
J'ai une série de lettres dans une cellule A1
Comment trouver tous les mots composables à partir de cette série? (en
liaison avec le dictionnaire).
En bref: comment trouver les anagrammes?


DANGAUT ==> 5040 anagrammes
par contre je ne sais évoquer le dictionnaire depuis EXCEL
une pseudo récursivité en utilisant la notion de pile :

Public pile() As Integer, partiel() As String
Sub anagramme()
On Error Resume Next
mot = [A1]
orig = mot
debut = ""
ligne = 1: colonne = 2
n = Len(mot)
ReDim pile(n), partiel(n)
etape1:
If Len(mot) = 1 Then GoTo etape2
debut = debut + Left(mot, 1)
p = p + 1
partiel(p) = mot
mot = Right(mot, Len(mot) - 1)
GoTo etape1
etape2:
ligne = ligne + 1
ecrire = debut & mot
If ligne > 30000 Then ligne = 1: colonne = colonne + 1
Cells(ligne + 1, colonne + 1).Value = ecrire
Application.StatusBar = colonne - 2 & "x30000 + " & ligne
i = 2
etape3:
mot = partiel(p)
p = p - 1
If Len(debut) = 1 Then GoTo etape4
debut = Left(debut, Len(debut) - 1)
GoTo etape5
etape4:
debut = ""
etape5:
pile(i) = pile(i) + 1
If pile(i) < i Then GoTo etape6
pile(i) = 0
i = i + 1
If i > n Then Exit Sub
GoTo etape3
etape6:
mot = Right(mot, Len(mot) - 1) + Left(mot, 1)
GoTo etape1
End Sub

@+


--
les news pas à jour ?? ne passez plus par votre FAI, les news à la source
!!!
placez ce raccourci dans la ligne de commande
news://news.microsoft.com/microsoft.public.fr.excel
et répondez OUI

n'oubliez pas les FAQ :
http://www.excelabo.net http://dj.joss.free.fr/faq.htm
http://www.faqoe.com http://faqword.free.fr