Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

moins de 1/1000 de seconde pour la boucle de Garnote

2 réponses
Avatar
Pascal Engelmajer
Salut,
il semble que mes posts précédent ont été filtrés ?
Solution mi-chèvre mi-choux...
qui tourne en moins d 1/1000 s
Option Explicit
Declare Function GetTickCount Lib "kernel32" () As Long
Sub sendMoreMoney()
'Un nombre de quatre chiffres
'plus un nombre de quatre chiffres
'= un nombre de 5 chiffres
'il y a une retenue notée i.
'Celle-ci est au maximum un donc M = 1.
' S + 1 + i = (10 ou 11)
'mais MO <> MM donc on peut exclure 11
'ce qui implique lettre O=0 (zéro) '
'Par conséquent S =8 ou S=9 suivant qu'il y a une retenue ou non,
'S(8 ou 9) + 1 + i (0 ou 1) = lettre O (0)

'donc
'E + i(0 ou 1) + O (0) =
'comme E = N et E = N + 9 sont impossibles, il vient N = E + 1 ; et S = 9.
' S E N D ' 9 567
' M O R E ' 1 085
'M O N E Y '10 652
'==========
'R = E - N + i ou R = E - N + i + 10
'R = (E-N) + i ou R = (E-N)+ i + 10
'=> R =i-1 ou R = i + 9 ' Début boucle mais...
' on pourrait poursuivre par voie logique
' R=0-1 est exclus R=1-1=0 aussi car R<>O (lettre 0 égale à zéro)
' S=9 => R <> 9 => R=8
'en supposant les variables bornées ]1, 9[
'10000*1 + (0*1000) + N*100 + E*10 + Y - S*1000 - E*100 - N*10 - D - M*100 -
(0*100) - R*10 - E=0
'après mise en facteur et réduction donne
'91*E - 90*N + D + 10*R - Y = 0
'on note = Y = (D+E) mod 10
Const m = 1
Const o = 0
Const s = 9
Dim e As Integer
Dim n As Integer
Dim d As Integer
Dim r As Integer
Dim y As Integer
Dim i As Integer
Dim z As Integer
Dim fl As Boolean
Debug.Print GetTickCount
For e = 2 To 7
For d = e + 1 To 7
n = e + 1
For i = -1 To 0 'retenue
For r = i - 1 To i + 9 'Début
If r < 2 Or r > 8 Then
'c'est impossible
Else
y = (d + e) Mod 10
If y < 2 Or y > 8 Then
fl = True 'r n'est pas bon
Else
z = 91 * e - 90 * n + d + 10 * r - y
If z = 0 Then
Debug.Print s & " " & e & "" & n & "" &
d & " " _
& "+" & " " & m & " " & o & "" & r & ""
& e & " " & _
"=" & " " & m & "" & o & " " & n & "" &
e & "" & y
Debug.Print GetTickCount
Exit Sub
End If
End If
If fl Then fl = False: Exit For 'r suivant
End If
Next r
Next i
Next d
Next e
End Sub
Est-ce une solution valide ?

--
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

2 réponses

Avatar
Pascal Engelmajer
Salut,
je confirme le filtrage : la présence des mots dans le post ? SEND ...
--
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
"Pascal Engelmajer" a écrit dans le
message de news:
Salut,
il semble que mes posts précédent ont été filtrés ?
Solution mi-chèvre mi-choux...
qui tourne en moins d 1/1000 s
Option Explicit
Declare Function GetTickCount Lib "kernel32" () As Long
Sub sendMoreMoney()
'Un nombre de quatre chiffres
'plus un nombre de quatre chiffres
'= un nombre de 5 chiffres
'il y a une retenue notée i.
'Celle-ci est au maximum un donc M = 1.
' S + 1 + i = (10 ou 11)
'mais MO <> MM donc on peut exclure 11
'ce qui implique lettre O=0 (zéro) '
'Par conséquent S =8 ou S=9 suivant qu'il y a une retenue ou non,
'S(8 ou 9) + 1 + i (0 ou 1) = lettre O (0)

'donc
'E + i(0 ou 1) + O (0) > 'comme E = N et E = N + 9 sont impossibles, il vient N = E + 1 ; et S = 9.
' S E N D ' 9 567
' M O R E ' 1 085
'M O N E Y '10 652
'========= > 'R = E - N + i ou R = E - N + i + 10
'R = (E-N) + i ou R = (E-N)+ i + 10
'=> R =i-1 ou R = i + 9 ' Début boucle mais...
' on pourrait poursuivre par voie logique
' R=0-1 est exclus R=1-1=0 aussi car R<>O (lettre 0 égale à zéro)
' S=9 => R <> 9 => R=8
'en supposant les variables bornées ]1, 9[
'10000*1 + (0*1000) + N*100 + E*10 + Y - S*1000 - E*100 - N*10 - D -
M*100 -

(0*100) - R*10 - E=0
'après mise en facteur et réduction donne
'91*E - 90*N + D + 10*R - Y = 0
'on note = Y = (D+E) mod 10
Const m = 1
Const o = 0
Const s = 9
Dim e As Integer
Dim n As Integer
Dim d As Integer
Dim r As Integer
Dim y As Integer
Dim i As Integer
Dim z As Integer
Dim fl As Boolean
Debug.Print GetTickCount
For e = 2 To 7
For d = e + 1 To 7
n = e + 1
For i = -1 To 0 'retenue
For r = i - 1 To i + 9 'Début
If r < 2 Or r > 8 Then
'c'est impossible
Else
y = (d + e) Mod 10
If y < 2 Or y > 8 Then
fl = True 'r n'est pas bon
Else
z = 91 * e - 90 * n + d + 10 * r - y
If z = 0 Then
Debug.Print s & " " & e & "" & n & ""
&

d & " " _
& "+" & " " & m & " " & o & "" & r &
""

& e & " " & _
"=" & " " & m & "" & o & " " & n & ""
&

e & "" & y
Debug.Print GetTickCount
Exit Sub
End If
End If
If fl Then fl = False: Exit For 'r suivant
End If
Next r
Next i
Next d
Next e
End Sub
Est-ce une solution valide ?

--
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




Avatar
garnote
Salut Pascal,

J'ai pourtant répondu à ton dernier message.
Rapide, très rapide et la bonne réponse.

:-)

Serge


"Pascal Engelmajer" a écrit dans le
message de news:
Salut,
il semble que mes posts précédent ont été filtrés ?
Solution mi-chèvre mi-choux...
qui tourne en moins d 1/1000 s
Option Explicit
Declare Function GetTickCount Lib "kernel32" () As Long
Sub sendMoreMoney()
'Un nombre de quatre chiffres
'plus un nombre de quatre chiffres
'= un nombre de 5 chiffres
'il y a une retenue notée i.
'Celle-ci est au maximum un donc M = 1.
' S + 1 + i = (10 ou 11)
'mais MO <> MM donc on peut exclure 11
'ce qui implique lettre O=0 (zéro) '
'Par conséquent S =8 ou S=9 suivant qu'il y a une retenue ou non,
'S(8 ou 9) + 1 + i (0 ou 1) = lettre O (0)

'donc
'E + i(0 ou 1) + O (0) > 'comme E = N et E = N + 9 sont impossibles, il vient N = E + 1 ; et S = 9.
' S E N D ' 9 567
' M O R E ' 1 085
'M O N E Y '10 652
'========= > 'R = E - N + i ou R = E - N + i + 10
'R = (E-N) + i ou R = (E-N)+ i + 10
'=> R =i-1 ou R = i + 9 ' Début boucle mais...
' on pourrait poursuivre par voie logique
' R=0-1 est exclus R=1-1=0 aussi car R<>O (lettre 0 égale à zéro)
' S=9 => R <> 9 => R=8
'en supposant les variables bornées ]1, 9[
'10000*1 + (0*1000) + N*100 + E*10 + Y - S*1000 - E*100 - N*10 - D -
M*100 -

(0*100) - R*10 - E=0
'après mise en facteur et réduction donne
'91*E - 90*N + D + 10*R - Y = 0
'on note = Y = (D+E) mod 10
Const m = 1
Const o = 0
Const s = 9
Dim e As Integer
Dim n As Integer
Dim d As Integer
Dim r As Integer
Dim y As Integer
Dim i As Integer
Dim z As Integer
Dim fl As Boolean
Debug.Print GetTickCount
For e = 2 To 7
For d = e + 1 To 7
n = e + 1
For i = -1 To 0 'retenue
For r = i - 1 To i + 9 'Début
If r < 2 Or r > 8 Then
'c'est impossible
Else
y = (d + e) Mod 10
If y < 2 Or y > 8 Then
fl = True 'r n'est pas bon
Else
z = 91 * e - 90 * n + d + 10 * r - y
If z = 0 Then
Debug.Print s & " " & e & "" & n & ""
&

d & " " _
& "+" & " " & m & " " & o & "" & r &
""

& e & " " & _
"=" & " " & m & "" & o & " " & n & ""
&

e & "" & y
Debug.Print GetTickCount
Exit Sub
End If
End If
If fl Then fl = False: Exit For 'r suivant
End If
Next r
Next i
Next d
Next e
End Sub
Est-ce une solution valide ?

--
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