Рубин (40 знаков)
Интерпретировать строку из букв az как число в базе 26 с a = 1, b = 2, ..., z = 26.
Таким образом, «пароль» можно рассматривать как число 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)
Если мы позволим s = "a"
(то есть: 1) и сделаем (N-1) вызовыs.succ!
, s будет "password"
(N). Другими словами, N = 1 + (N-1).
Для примера, который будет выполняться быстрее, чтобы доказать правильность вычисления N, рассмотрим "pass"
в качестве цели, где N
16*(26**3) +
1*(26**2) +
19*(26**1) +
19*(26**0)
и
s = "a"
(N-1).times { s.succ! }
puts s #== "pass"
Так как мы хотим печатать "a"
, нам нужно
s = "`"
N.times { print(s.succ! + " ") }
Итак, вернемся к полному «паролю». N = 129052722140
, оставив:
s=?`;0x1e0c2443dc.times{$><<s.succ!+" "}
Я охотился за более компактной формой 129052722140 == 0x1e0c2443db
но не смог ее найти.
(Обновлено, чтобы исправить отсутствие печати "a"
, спасибо Кэри.)