OVH Cloud OVH Cloud

Recherche une boucle !

37 réponses
Avatar
garnote
Bonjour le monde,

SEND + MORE = MONEY

Le jeu consiste à remplacer chaque lettre par un nombre entier
(de 0 à 9) de telle sorte qu'aucune lettre n'ait la même valeur.
De plus, on ne doit pas attribuer à la première lettre des
mots la valeur 0. Il faut alors que la somme soit correcte.
Je crois que la solution :
S=9, E=5, N=6, D=7, M=1, O=0, R=8 et Y=2
est unique!
Peut-on obtenir ce résultat avec une macro?

Modeste début :
(1000s + 100e + 10n + d) + (1000m + 100o + 10r + e) =
10000m + 1000o +100n + 10e + y
Mais là, comment « boucler » cette patente-là en tenant compte
des restrictions précédentes ?
Moi je déclare forfait !

Allez, éblouissez-moi :-)))

Serge

7 réponses

1 2 3 4
Avatar
Pascal Engelmajer
Salut Daniel,
cette procédure est censé faire quoi car à par le temps je n'obtiens rien
!!!
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
http://www.ilyapa.net/baseExcel
"Daniel.M" a écrit dans le message de
news:
Salut Sergio,

Attendu cinq minutes et pas encore de réponse de
vos macros ! Combien de temps de par che vous :-)
pour obtenir la réponse ?


Voilà bien une illustration de l'importance des déclarations de variables!

Cette variation 'typée' du code de 'docm' roule en moins de 20 secondes
chez moi

(vieille bécane à 450 MHz).

Salutations,

Daniel M.


Declare Function GetTickCount Lib "kernel32" () As Long

Sub Depart_Send_More3()
Dim k As Integer
Dim j0%, j1%, j2%, j3%, j4%, j5%, j6%, j7%
Dim bcA() As Integer, motA() As Long
Dim t1&, t2&

t1 = GetTickCount ' chrono initial

k = 10
ReDim bcA(1 To k)
For j0 = 1 To k
bcA(j0) = k - 1
Next j0

ReDim motA(1 To k)


For j0 = 1 To k
motA(1) = bcA(j0)
For j1 = 1 To k
If j1 <> j0 Then
motA(2) = bcA(j1)
For j2 = 1 To k
If j2 <> j0 And j2 <> j1 Then
motA(3) = bcA(j2)
For j3 = 1 To k
If j3 <> j0 And j3 <> j1 And j3 <> j2 Then
motA(4) = bcA(j3)
For j4 = 1 To k
If j4 <> j0 And j4 <> j1 And j4 <> j2 And j4 <> j3 Then
motA(5) = bcA(j4)
For j5 = 1 To k
If j5 <> j0 And j5 <> j1 And j5 <> j2 And j5 <> j3 And j5 <> j4 Then
motA(6) = bcA(j5)
For j6 = 1 To k
If j6 <> j0 And j6 <> j1 And j6 <> j2 And j6 <> j3 And j6 <> j4 _
And j6 <> j5 Then
motA(7) = bcA(j6)
For j7 = 1 To k
If j7 <> j0 And j7 <> j1 And j7 <> j2 And j7 <> j3 And j7 <> j4 _
And j7 <> j5 And j7 <> j6 Then
motA(8) = bcA(j7)

VerifierCeNot3 motA

End If
Next
End If
Next
End If
Next
End If
Next
End If
Next
End If
Next
End If
Next
Next

t2 = GetTickCount

Debug.Print "Terminé en "; t2 - t1 & " millièmes de secs."

End Sub


Sub VerifierCeNot3(Fact() As Long)
Static Solution

If Fact(1) <> 0 And Fact(5) <> 0 Then
If 1000 * Fact(1) + 100 * Fact(2) + 10 * Fact(3) + _
Fact(4) + 1000 * Fact(5) + 100 * Fact(6) + _
10 * Fact(7) + Fact(2) = _
10000 * Fact(5) + 1000 * Fact(6) + _
100 * Fact(3) + 10 * Fact(2) + Fact(8) Then
Solution = Solution + 1
Debug.Print "Solution"; Solution; "- ";
Debug.Print Fact(1); Fact(2); Fact(3); _
Fact(4); " + "; Fact(5); Fact(6); _
Fact(7); Fact(2); " = "; Fact(5); _
Fact(6); Fact(3); Fact(2); Fact(8)
End If
End If
End Sub





Avatar
Pascal Engelmajer
Re-Salut Daniel,
j'ai été trop vite je n'avais pas lu le post correctif en dessous...
j'ai une boucle qui fait la même chose en moins de 1/1000 de seconde....
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
http://www.ilyapa.net/baseExcel
"Daniel.M" a écrit dans le message de
news:
Salut Sergio,

Attendu cinq minutes et pas encore de réponse de
vos macros ! Combien de temps de par che vous :-)
pour obtenir la réponse ?


Voilà bien une illustration de l'importance des déclarations de variables!

Cette variation 'typée' du code de 'docm' roule en moins de 20 secondes
chez moi

(vieille bécane à 450 MHz).

Salutations,

Daniel M.


Declare Function GetTickCount Lib "kernel32" () As Long

Sub Depart_Send_More3()
Dim k As Integer
Dim j0%, j1%, j2%, j3%, j4%, j5%, j6%, j7%
Dim bcA() As Integer, motA() As Long
Dim t1&, t2&

t1 = GetTickCount ' chrono initial

k = 10
ReDim bcA(1 To k)
For j0 = 1 To k
bcA(j0) = k - 1
Next j0

ReDim motA(1 To k)


For j0 = 1 To k
motA(1) = bcA(j0)
For j1 = 1 To k
If j1 <> j0 Then
motA(2) = bcA(j1)
For j2 = 1 To k
If j2 <> j0 And j2 <> j1 Then
motA(3) = bcA(j2)
For j3 = 1 To k
If j3 <> j0 And j3 <> j1 And j3 <> j2 Then
motA(4) = bcA(j3)
For j4 = 1 To k
If j4 <> j0 And j4 <> j1 And j4 <> j2 And j4 <> j3 Then
motA(5) = bcA(j4)
For j5 = 1 To k
If j5 <> j0 And j5 <> j1 And j5 <> j2 And j5 <> j3 And j5 <> j4 Then
motA(6) = bcA(j5)
For j6 = 1 To k
If j6 <> j0 And j6 <> j1 And j6 <> j2 And j6 <> j3 And j6 <> j4 _
And j6 <> j5 Then
motA(7) = bcA(j6)
For j7 = 1 To k
If j7 <> j0 And j7 <> j1 And j7 <> j2 And j7 <> j3 And j7 <> j4 _
And j7 <> j5 And j7 <> j6 Then
motA(8) = bcA(j7)

VerifierCeNot3 motA

End If
Next
End If
Next
End If
Next
End If
Next
End If
Next
End If
Next
End If
Next
Next

t2 = GetTickCount

Debug.Print "Terminé en "; t2 - t1 & " millièmes de secs."

End Sub


Sub VerifierCeNot3(Fact() As Long)
Static Solution

If Fact(1) <> 0 And Fact(5) <> 0 Then
If 1000 * Fact(1) + 100 * Fact(2) + 10 * Fact(3) + _
Fact(4) + 1000 * Fact(5) + 100 * Fact(6) + _
10 * Fact(7) + Fact(2) = _
10000 * Fact(5) + 1000 * Fact(6) + _
100 * Fact(3) + 10 * Fact(2) + Fact(8) Then
Solution = Solution + 1
Debug.Print "Solution"; Solution; "- ";
Debug.Print Fact(1); Fact(2); Fact(3); _
Fact(4); " + "; Fact(5); Fact(6); _
Fact(7); Fact(2); " = "; Fact(5); _
Fact(6); Fact(3); Fact(2); Fact(8)
End If
End If
End Sub





Avatar
Daniel.M
Salut Pascal,

j'ai une boucle qui fait la même chose en moins de 1/1000 de seconde....


Sérieux? Tu trouves le résultat en deça de 0.001 sec.
Ça m'intéresse!

Salutations,

Daniel M.

Avatar
Daniel.M
Ta dernière colle suscite en moi le désir de faire un truc complètement
'template'.

Tu lui donnes ton équation du style

ALORS + ALORS + NOUS + NOUS - LAVONS = 0

et ça le résoud tout seul.

Pascal a peut-être fait cela... à suivre

Salutations,

Daniel M.


"garnote" wrote in message
news:66vsc.16539$
En voici deux autres :-)

ALORS + ALORS + NOUS + NOUS = LAVONS
DIX + PLUS + DEUX = DOUZE

Serge



Avatar
garnote
De grandes ambitions :-))) Monsieur !

Serge


"Daniel.M" a écrit dans le message de
news:
Ta dernière colle suscite en moi le désir de faire un truc complètement
'template'.

Tu lui donnes ton équation du style

ALORS + ALORS + NOUS + NOUS - LAVONS = 0

et ça le résoud tout seul.

Pascal a peut-être fait cela... à suivre

Salutations,

Daniel M.


"garnote" wrote in message
news:66vsc.16539$
En voici deux autres :-)

ALORS + ALORS + NOUS + NOUS = LAVONS
DIX + PLUS + DEUX = DOUZE

Serge







Avatar
Pascal Engelmajer
Salut Daniel,
voir mon HS dont deux exemplaires ont été filtré à cause sûrement du sens de
l'énoncé du pb ( argent envoyer plus)
moins de 1/1000 de seconde pour la boucle de Garnote

à 16 h 49
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
http://www.ilyapa.net/baseExcel
"Daniel.M" a écrit dans le message de
news:
Salut Pascal,

j'ai une boucle qui fait la même chose en moins de 1/1000 de seconde....


Sérieux? Tu trouves le résultat en deça de 0.001 sec.
Ça m'intéresse!

Salutations,

Daniel M.






Avatar
Daniel.M
Pascal,

Ben, je ne pouvais pas le voir dans mon lecteur de news: il est tout simplement
inexistant.

Avec Google Groups, je l'ai récupéré.

Merci.

Daniel M.

"Pascal Engelmajer" wrote in message
news:
Salut Daniel,
voir mon HS dont deux exemplaires ont été filtré à cause sûrement du sens de
l'énoncé du pb ( argent envoyer plus)
moins de 1/1000 de seconde pour la boucle de Garnote

à 16 h 49
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
http://www.ilyapa.net/baseExcel


1 2 3 4