Fish a écrit :Ce n'est pas ce qui était convenu : Tu devais trouver un mot de passe de 5 caractères de long insérés dans mon système. Relis le poste si tu veux.
Fish a écrit :Je te lance un défit alors. Je mets le même nombres de caractères que dans ton digicode et on va voir combien de temps tu mets. Okay? ^^
La saisie dans un digicode se fait d'un seul tenant. Donc, déjà, l'énoncé est biaisé.
Maintenant, supposons que ton système existe , mais fait par un bricoleur qui n'aurait que des portes et des digicodes sous la main :
A priori, ça serait une seule porte avec 3 digicodes. Mais alors, où est la différence entre 3 digicodes qui contiennent chacun une partie de mot de passe global et un seul digicode qui contient tout le mot de passe global ?
La seule différence, c'est que par exemple pour un code 5 chiffres
12-34-5 ( c'est à dire 12 tapé sur le 1er digicode, 34 sur le 2eme ,etc... ) n'est pas identique à 1-23-45.
C'est bien sur ce point que tu bases toute ton argumentation comme quoi ton programme est plus difficile à passer, n'est ce pas ?
Sauf que ....
Le fait de devoir changer de digicode en cours de saisie n'est qu'un élément de plus. On peut alors tout aussi bien imaginer un seul digicode avec la touche "*" en plus ( par exemple hein ), et "simuler" le changement de digicode avec la touche *
Le code deviendrait donc 12*34*5, et là, tu te rends bien compte que tu es revenu à la case départ en terme de conception : tu es revenu à un seul digicode, mais juste avec une touche de plus. Donc, tu saisis ton mot de passe en base 11 et non plus en base 10, ce qui augmente le nombre de possibilité, mais ne change fondamentalement rien au principe.
CQFD
[edit]
Au fait, il y a 2 solutions à ton défi :
- <rien> <rien> 4 8 0
- <rien> <rien> <rien> 8 0
pourquoi 2 solutions ?
Voici le code que j'ai écrit pour trouver:
► Afficher le texte
Code : Tout sélectionner
#include <String.au3>
Const $POSSIBILITES = "x,0,1,2,3,4,5,6,7,8,9"
Func getpos($IN)
If $IN = "x" Then
Return ("")
Else
Return ($IN)
EndIf
EndFunc ;==>getpos
Local $chaine1, $chaine2, $chaine3, $chaine4, $chaine5, $chaine_encrypt, $passcorrect1, $passcorrect2, $passcorrect3, $passcorrect4, $passcorrect5
$chaine_encrypt = 0
$passcorrect1 = "D70D5D8AD3CE1DD680951F0345FD254A05EA10AACDDD673DE8E08A0DEE553D854D43AA493711A0F6F75514C4F5B5E05352C5A50DF9E7E8D32F0ADBE7BD2E65981F0F3188B11BFA44786D8AA51131A1C9FB243696F373983881B59EDC08F9BDDAC2BBC0455EAD3D12DBC1EC6FA123C36050722E8746AC3F3DA01506D4D5CE8B83"
$passcorrect2 = ""
$passcorrect3 = "C0240DF77E640C146915F3E8BC95DDB244BC5F22CEBA2A500A2D530DA75BA8462E6F99FB74646F3A5437C3C29D29438DAB1682D0C7BDF710BD55C7E27E61B964"
$passcorrect4 = "33DDF60EF68DC98169BC7DE13DAE9302398D2BA8273081B0AF211A0BCCA2BEBB52B6B7C62CA9D23FA6DFF46E5481A901DA6E16DB65D32DD24787C04E0F5AA4C5"
$passcorrect5 = "7080519E398522ADC809158E0C9BD0DC0BF1D318AB94AE3876040ACA443D825A81C5F3B3FFE161057259760E6CA5C04FE32422826FDDAE974C8780BCFBA9C2DB"
For $cpt1 In StringSplit($POSSIBILITES, ",", 2)
;; $chaine1 = InputBox ("Mot de passe","Entrez le mot de passe : ","", "*")
$chaine1 = getpos($cpt1)
$chaine_encrypt = _StringEncrypt(1, $chaine1, $chaine1, 6)
If $passcorrect1 = $chaine_encrypt Then
For $cpt2 In StringSplit($POSSIBILITES, ",", 2)
;; $chaine2 = InputBox ("Mot de passe","Entrez le mot de passe : ","", "*")
$chaine2 = getpos($cpt2)
$chaine_encrypt = _StringEncrypt(1, $chaine2, $chaine2, 6)
If $passcorrect2 = $chaine_encrypt Then
For $cpt3 In StringSplit($POSSIBILITES, ",", 2)
;; $chaine3 = InputBox ("Mot de passe","Entrez le mot de passe : ","", "*")
$chaine3 = getpos($cpt3)
$chaine_encrypt = _StringEncrypt(1, $chaine3, $chaine3, 6)
If $passcorrect3 = $chaine_encrypt Then
For $cpt4 In StringSplit($POSSIBILITES, ",", 2)
$chaine4 = getpos($cpt4)
$chaine_encrypt = _StringEncrypt(1, $chaine4, $chaine4, 6)
If $passcorrect4 = $chaine_encrypt Then
For $cpt5 In StringSplit($POSSIBILITES, ",", 2)
$chaine5 = getpos($cpt5)
$chaine_encrypt = _StringEncrypt(1, $chaine5, $chaine5, 6)
If $passcorrect5 = $chaine_encrypt Then
MsgBox(0, "Bravo", "Tu a gagné, FishPanai à perdu!" & @CRLF & $cpt1 & $cpt2 & $cpt3 & $cpt4 & $cpt5)
EndIf
Next
EndIf
Next
EndIf
Next
EndIf
Next
EndIf
Next
Explique moi comment on commence par ne <rien> taper sur un digicode. Avec ton programme, c'est en fait la touche <entree> qui sert de touche "*".
donc le code, c'est **480 ou ***80, et un seul digicode suffit, comme je l'ai démontré plus haut, donc une seule saisie suffit également, et c'est plus simple à retenir.
Autre remarque à propos de ton programme : suppose un instant qu'un farceur soit venu taper des trucs sur ton interface pendant que tu avais le dos tourné : plus moyen de taper le bon code à moins de relancer le programme... pas glop non plus ça...