Помогите! Я только что вошел в Stack Exchange, но забыл, какой у меня пароль! Мне нужен способ решить это, прежде чем я выйду.
К счастью, я отличный хакер. Я не только смог найти хэш своего пароля, но также нашел алгоритм хеширования в Stack Exchange! Он принимает значение ASCII каждой цифры, умноженное на место этой цифры, а затем суммирует все эти значения вместе. Например:
"135" -> 1*49 + 2*51 + 3*53 = 310
Я помню, что мой пароль состоит из 3 цифр, и что каждый символ представляет собой число от 0 до 5 включительно (такое, что оно будет соответствовать регулярному выражению :) ^[0-5]{3}$
, но это все еще слишком много возможностей, чтобы угадать. Мне нужна программа, которая может конвертировать хэш обратно в потенциальные пароли, но, несмотря на то, что я опытный хакер, я не могу написать код, чтобы спасти мою жизнь! Я смог написать эти тесты вручную, хотя:
input -> output
288 -> 000 // lowest possible hash
290 -> 200, 010
298 -> 022, 050, 103, 131, 212, 240, 321, 402, 430, 511
318 -> 555 // highest possible hash
Может ли кто-нибудь из вас написать для меня программу, которая возьмет хеш и напечатает все возможные пароли, которые я мог бы использовать?
На входе всегда можно будет указать хотя бы один действительный пароль. Разрешен любой формат вывода, если строки могут быть четко определены. Я также не обеспокоен ведущими нулями, поэтому, если потенциальный пароль есть 001
, я также приму 01
или 1
.
Пожалуйста, помогите мне быть заблокированным из Stack Exchange!
счет
Это код-гольф , поэтому выигрывает самый короткий ответ на каждом языке!
"135" -> 1*49 + 2*51 + 3*53 = 310
54
я смогу вывести нули впереди.
1
значение Ascii49
вместо48
?