Page 1 sur 1
[..] Générer toutes les possibilités
Posté : dim. 22 févr. 2009 19:19
par Yoyo86220
Bonjour à tous,
Voici le script que j'ai besoin:
Au démarrage une inputbox ou on peu écrire se que l'on veut et je veux que le script génère toutes les combinaisons possible.
Voici se que j'ai fait mais ça ne créé pas toute les possibilité...
Code : Tout sélectionner
$mot = InputBox("Entrer votre mot", "")
$len = StringLen($mot)
For $m = 1 To $len
For $i = 0 To $len-2
$Lettre_a_decal = StringMid($mot, $len-$i, 1)
$lettre_avant = StringMid($mot, $len-$i-1, 1)
$Lettres_apres = StringMid($mot, $len-$i+1, $len)
$lettres_avant = StringLeft($mot, $len-$i-2)
$mot_possible = $lettres_avant&$Lettre_a_decal&$lettre_avant&$Lettres_apres
FileWriteLine("Password.txt", $mot_possible)
Next
Next
Re: [..] Générer toutes les possibilités
Posté : ven. 27 févr. 2009 02:57
par Yoyo86220
Aucune idée?
Re: [..] Générer toutes les possibilités
Posté : ven. 27 févr. 2009 12:57
par jbnh
Salut,
Bon j'ai un peu cherché et j'ai pas trouvé

Je poste quand même ce que j'ai pondu en espérant que ca donnera une idée a quelqu'un de plus compétent :
Code : Tout sélectionner
Local $random
$word = "bonjour"
$len = StringLen($word)
$Array = StringSplit($word,"")
For $X = 1 to $Len
$random &= $Array[Random (1, $Array[0], 1)]
Next
Msgbox(0,"", $random)
Mon code retourne un mot composé des lettres de bonjour en random.
Re: [..] Générer toutes les possibilités
Posté : ven. 27 févr. 2009 13:09
par ani
je dois avoir un algo quelque part sur un des pc
si je comprend bien votre demande vous désirez retourner toute ls possibilitées
genre 1234 retourne 24 combinaison ?
1*2*3*4 = 24 ?
je reviend

Re: [..] Générer toutes les possibilités
Posté : ven. 27 févr. 2009 14:02
par Yogui
script en provenance du forum anglais :
Code : Tout sélectionner
Local $current = 1
Local $set = 'bonjour'
While StringLen(FindPhrase($current,$set)) <= 7
ConsoleWrite(FindPhrase($current,$set) & @CRLF)
$current += 1
Wend
Func FindPhrase($num, $set, $min_len=1)
If $num = 0 Then Return ""
Local $table = StringSplit($set,'')
Local $set_len = $table[0]
Local $total = 0, $i=0, $len=0, $value
For $i = $min_len-1 To 1 Step -1
$num += $set_len^$i
Next
While $total < $num
$len+=1
$total += $set_len^$len
WEnd
$total-=$set_len^$len
While $total < $num And $len > 0
$total += $set_len^($len-1)
$i += 1
If $total = $num Then
$total -= $set_len^($len-1)
$value &= $table[$i]
$len-=1
$i=0
EndIf
If $total > $num Then
$total -= $set_len^($len-1)
$value &= $table[$i]
$len-=1
$i=0
EndIf
WEnd
Return $value
EndFunc
Re: [..] Générer toutes les possibilités
Posté : ven. 27 févr. 2009 14:19
par ani
a regarder comme çà, je suis pas sure que sa soit çà !
le script va découper le mot s'en tenir compte du mot entier , je m'explique
bonjour
=> bbbbbbb, bbbbbbo ect...
(bonjour) = 5040(combinaison)
1*2*3*4*5*6*7 et non 7^7
je reprend le 1234 = 24 combinaison en comptant le 1234
Code : Tout sélectionner
1234
1243
1342
1324
1423
1432
2134
2143
2341
2314
2413
2431
3214
3241
3124
3142
3421
3412
4321
4312
4231
4213
4132
4123
je retrouve pas mon petit algo

vais essayer de le refaire

Re: [..] Générer toutes les possibilités
Posté : ven. 27 févr. 2009 14:40
par Yogui
Effectivement alors je corrige toujours en directe du forum anglais
► Afficher le texte
Code : Tout sélectionner
func rotate($sString, $nRotateLevel)
local $aStringArray = StringSplit($sString,"")
local $nStartRotate = $aStringArray[0] - $nRotateLevel + 1
local $n, $tempchar, $tempstr = "", $retval = ""
for $n = 1 to $nStartRotate - 1
$tempstr= $tempstr & $aStringArray[$n]
next
$tempchar = $aStringArray[$nStartRotate]
for $n = $nStartRotate+1 to $aStringArray[0]
$retval = $retval & $aStringArray[$n]
next
$retval = $tempstr & $retval & $tempchar
return $retval
endfunc
func permute_internal($sString, $nRotateLevel, byref $permutations)
local $n, $str
dim $arr[$nRotateLevel]
if $nRotateLevel = 2 then
$permutations = $permutations & ":" & rotate($sString,$nRotateLevel)
return
endif
$str = $sString
for $n = 0 to $nRotateLevel -1
$str = rotate($str,$nRotateLevel)
$arr[$n] = $str
;--- special check, to stop a level beeing printed twice ---
if not (($n = 0) AND (StringLen($sString) > $nRotateLevel)) then
$permutations = $permutations & ":" & $arr[$n]
endif
permute_internal($arr[$n],$nRotateLevel-1,$permutations)
next
endfunc
func permute($sString)
global $permutations = ""
permute_internal($sString,StringLen($sString),$permutations)
$permutations = StringTrimLeft($permutations,1)
return StringSplit($permutations,":")
endfunc
;-----------------------------------------------------------------------------
;-- MAIN
;-----------------------------------------------------------------------------
$permutarray = permute("1342")
$msg = ""
for $n = 1 to $permutarray[0]
$msg = $msg & $permutarray[$n] & @CRLf
next
msgbox(0,"", $msg)
ce qui bonne :
► Afficher le texte
Code : Tout sélectionner
2341
2431
2134
2143
2341
2314
3412
3142
3241
3214
3412
3421
4123
4213
4312
4321
4123
4132
1234
1324
1423
1432
1234
1243
Edit pour ajouter ce lien :
http://msdn.microsoft.com/en-us/library/aa302371.aspx
Re: [..] Générer toutes les possibilités
Posté : ven. 27 févr. 2009 14:53
par Tlem
Super le brainstorming.

Re: [..] Générer toutes les possibilités
Posté : sam. 28 févr. 2009 02:42
par ani
merci yogui
