Помогите! Я только что вошел в 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!
счет
Это код-гольф , поэтому выигрывает самый короткий ответ на каждом языке!
1
значение Ascii49
вместо48
?"135" -> 1*49 + 2*51 + 3*53 = 310
54
я смогу вывести нули впереди.Ответы:
05AB1E , 9 байтов
Попробуйте онлайн!
Возвращает список списков цифр.
источник
C ,
113108 байтУникально видеть, что предназначено для вывода, вывод имеет формат: 200010
Все пароли написаны как 3 цифры без разделителя.
источник
Желе , 16 байт
Монадическая ссылка, возвращающая список списков цифр.
Попробуйте онлайн!
Как?
источник
Python 2 ,
12675 байт-2 благодаря @ArnoldPalmer
Попробуйте онлайн!
источник
P/6/6
наP/36
, вы сэкономите 2 байтаMATL , 20 байтов
Попробуйте онлайн!
объяснение
источник
Python 2 , 81 байт
Попробуйте онлайн!
источник
Haskell,
71706461 байтПопробуйте онлайн!
источник
C # (.NET Core) ,
133 131 125123 байтаПопробуйте онлайн!
источник
Console.Write($"{i%48}{j%48}{k%48},");
для вывода, а не в построении возвращаемого значения и удалении ненужных скобок вокруг оператора if для сохранения 8 байтов.Func<int,string>
, но если вы определяете его как,Action<int>
то оно не ожидает возвращаемого значения.char
иint
в C #, вы можете объявить свои итерационные переменные, какchar
в первом цикле, и по-прежнему выполнять вычисление хеша точно так же, как и при упрощенииConsole.Write()
предложения. Таким образом, вы можете получить правильное 119-байтовое решение. Попробуйте онлайн!Древесный уголь , 33 байта
Попробуйте онлайн!
Подобный подход к другим ответам: трижды цикл от 0 до 5, вычислить хеш и вывести состояние переменных итерации, если оно совпадает с входным хешем.
Ссылка на подробную версию .
источник
CJam ,
2625 байтов-1 байт благодаря Challenger5
Анонимный блок ожидает хеш в стеке (в виде целого числа) и оставляет результат в стеке (в виде списка строк).
Попробуйте онлайн!
объяснение
источник
{:H;6Zm*{s:i3,:).*:+H=},}
на 1 байт короче. Он использует цифровые строки в фильтре, а не числа, чтобы использоватьm*
автоматический диапазон.Java, 162 байта
источник
JavaScript (Firefox 30-57), 72 байта
источник
Pyth, 18 байт
источник
QBIC , 40 байт
объяснение
источник
R ,
676261 байт-5 байт благодаря Ярко Дуббелдаму
Попробуйте онлайн!
читает число из
stdin
; возвращает матрицу, где строки являются символами.Он генерирует все возможные тройки цифр в матричном формате (
b
), вычисляет матричный продуктb * [1,2,3]
, берет строки,b
которые соответствуют (вычитая288
из входных данных1*48+2*28+3*48
), и возвращает их.источник
t(t(m))
это сокращение дляas.matrix(m)