Wsparcie! Właśnie zalogowałem się do Stack Exchange, ale zapomniałem, jakie jest moje hasło! Potrzebuję sposobu, aby to rozwiązać, zanim się wyloguję.
Na szczęście jestem doskonałym hakerem. Nie tylko mogłem znaleźć skrót mojego hasła, ale także znalazłem algorytm mieszania Stack Exchange! Pobiera wartość ASCII każdej cyfry pomnożoną przez miejsce tej cyfry, a następnie sumuje wszystkie te wartości razem. Na przykład:
"135" -> 1*49 + 2*51 + 3*53 = 310
Pamiętam, że moje hasło składa się z 3 cyfr i że każdy znak jest liczbą od 0 do 5 włącznie (tak, że będzie pasować do wyrażenia regularnego:) ^[0-5]{3}$
, ale to wciąż zbyt wiele możliwości zgadnięcia. Potrzebuję programu, który może przekształcić skrót z powrotem w potencjalne hasła, ale pomimo tego, że jestem ekspertem w dziedzinie hakerów, nie mogę kodować, aby uratować mi życie! Udało mi się jednak napisać te testy ręcznie:
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
Czy ktoś z was może napisać program, który weźmie skrót i wydrukuje wszystkie możliwe hasła, których mógłbym użyć?
Dane wejściowe zawsze będą w stanie wygenerować co najmniej jedno prawidłowe hasło. Dowolny format wyjściowy jest dozwolony, o ile ciągi znaków można wyraźnie zidentyfikować. Nie jestem również zaniepokojony zerami, więc jeśli potencjalny hasło 001
, będę również zaakceptować 01
lub 1
.
Proszę, pomóż mi zostać zablokowanym w Stack Exchange!
Punktacja
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w każdym języku!
"135" -> 1*49 + 2*51 + 3*53 = 310
54
, mogę wyliczyć zera z przodu.
1
ma wartości Ascii ?49
48