Socorro! Acabei de entrar no Stack Exchange, mas esqueci qual é a minha senha! Preciso de uma maneira de resolver isso antes de sair.
Felizmente, sou um excelente hacker. Não só consegui encontrar o hash da minha senha, como também encontrei o algoritmo de hash do Stack Exchange! Ele pega o valor ASCII de cada dígito multiplicado pelo local desse dígito e depois soma todos esses valores. Por exemplo:
"135" -> 1*49 + 2*51 + 3*53 = 310
Lembro que minha senha tem três dígitos e que cada caractere é um número entre 0 e 5, inclusive (de modo que corresponda ao regex :) ^[0-5]{3}$
, mas ainda há muitas possibilidades de adivinhação. Preciso de um programa que possa converter um hash de volta em senhas em potencial, mas, apesar de ser um hacker experiente, não posso codificar para salvar minha vida! Consegui escrever esses testes manualmente:
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
Alguém pode escrever um programa para mim que use um hash e imprima todas as senhas possíveis que eu poderia ter usado?
A entrada sempre poderá produzir pelo menos uma senha válida. Qualquer formato de saída é permitido, desde que as cadeias possam ser claramente identificadas. Também não estou preocupado com zeros à esquerda, portanto, se houver uma senha em potencial 001
, também aceitarei 01
ou 1
.
Por favor, ajude-me a ficar fora do Stack Exchange!
Pontuação
Isso é código-golfe , então a resposta mais curta em cada idioma vence!
"135" -> 1*49 + 2*51 + 3*53 = 310
54
, consigo calcular os zeros na frente.
1
é o valor Ascii em49
vez de48
?