Вдохновленный этим плохо полученным мигрированным постом .
Руководитель службы безопасности в вашей компании обеспокоен вашей системой генерации ПИН-кода после того, как он ее дал 12345
. Он также не очень ценил шутку со «Космическими шарами», которую вы сделали за его счет, поэтому вам поручили переписать генератор ПИН-кода. Так как он должен соответствовать некоторому специальному оборудованию, вы должны сделать его как можно меньше.
Твое задание
- Вы берете два ввода - количество ПИН и размер ПИН в цифрах.
- Генерация указанного количества ПИН-кодов указанного размера случайным образом и распечатка.
- Все действующие ПИН-коды такого размера должны быть распечатаны, даже если они не всегда одинаковы.
Тем не менее, существуют некоторые ограничения на PIN-коды - вот недействительные:
- Если все пары имеют одну и ту же цифру:
114422
(Примечание: очевидно, что это будут все PIN-коды с одинаковыми цифрами). - Все чаще линейные штифты (мод 10):
246802
. - Все группы 3 представляют собой физические линии на клавиатуре
1 2 3;4 5 6;7 8 9;bksp 0 enter;
:147369
. - PIN-код может быть полностью разделен на группы из правила 1 и правила 3.
- Если все пары имеют одну и ту же цифру:
- Это код-гольф , поэтому выигрывает самый короткий код в байтах !
55123
)?123
, но55432
было бы хорошо.Ответы:
Pyth, 120 байт
Тогда я решил добавить реальную реализацию. Генерирует случайные числа, пока не будет найдено одно, отвечающее всем требованиям. Вероятно, может быть улучшено много!
Онлайн версия
источник
Perl 5, 244
Начинается с генерации случайных чисел для данного размера.
И печатает только те, которые не соответствуют ограничениям.
Найти решение для линий клавиатуры (без жестких комбинаций) было забавно.
Тестовое задание
источник