Ruby (40 caractères)
Interpréter une chaîne de lettres az comme un nombre en base 26, avec a = 1, b = 2, ..., z = 26.
Le "mot de passe" peut donc être considéré comme le nombre N =
16*(26**7) +
1*(26**6) +
19*(26**5) +
19*(26**4) +
23*(26**3) +
15*(26**2) +
18*(26**1) +
4*(26**0)
Si nous laissons s = "a"
(c'est-à-dire: 1) et faisons (N-1) des appels à s.succ!
, s sera "password"
(N). En d'autres termes, N = 1 + (N-1).
Pour un exemple qui s'exécutera plus rapidement, pour prouver que le calcul de N est correct, considérez "pass"
comme la cible, où N est
16*(26**3) +
1*(26**2) +
19*(26**1) +
19*(26**0)
et
s = "a"
(N-1).times { s.succ! }
puts s #== "pass"
Puisque nous voulons "a"
aussi imprimer , nous avons besoin
s = "`"
N.times { print(s.succ! + " ") }
Revenons donc au "mot de passe" complet. N = 129052722140
, en quittant:
s=?`;0x1e0c2443dc.times{$><<s.succ!+" "}
J'ai cherché une forme plus compacte 129052722140 == 0x1e0c2443db
mais je n'en ai pas trouvé.
(Mis à jour pour corriger le manque d'impression "a"
, grâce à Cary.)