Довідка! Я щойно увійшов до Stack Exchange, але забув, що таке мій пароль! Мені потрібен спосіб опрацювати це, перш ніж вийти з системи.
На щастя, я відмінний хакер. Не тільки я зміг знайти хеш мого пароля, але і знайшов алгоритм хешування Stack Exchange! Він приймає значення ASCII кожної цифри, помножене на місце цієї цифри, а потім підсумовує всі ці значення разом. Наприклад:
"135" -> 1*49 + 2*51 + 3*53 = 310
Я пам’ятаю, що мій пароль має три цифри і що кожен символ є числом від 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
?