moins de 1/1000 de seconde pour la boucle de Garnote
2 réponses
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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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" <pascal.engelmajer@ilyapa_spam.net> a écrit dans le
message de news: eVorJemQEHA.1392@TK2MSFTNGP09.phx.gbl...
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
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
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
Salut Pascal,
J'ai pourtant répondu à ton dernier message.
Rapide, très rapide et la bonne réponse.
:-)
Serge
"Pascal Engelmajer" <pascal.engelmajer@ilyapa_spam.net> a écrit dans le
message de news: eVorJemQEHA.1392@TK2MSFTNGP09.phx.gbl...
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
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