Створіть кілька безпечних PIN-кодів


17

Натхненний цим погано отриманим міграційним повідомленням .

Начальник служби безпеки вашої компанії стурбований системою генерації Вашого ПІН-коду після того, як вона його надала 12345. Він також не дуже оцінив жарт Spaceballs, який ви зробили за його рахунок, тому вам було доручено переписати генератор PIN-кодів. Оскільки він повинен вміщуватися на якомусь спеціальному обладнання, ви повинні зробити його якомога менше.

Ваше завдання

  • Ви берете два входи - # PIN-кодів і розмір PIN-коду в цифрах.
  • Створіть задану кількість PIN-кодів вказаного розміру випадковим чином і роздрукуйте їх.
  • Усі дійсні PIN-коди розміру повинні бути роздруковані, навіть якщо вони не є однорідними.
  • Однак існують деякі обмеження щодо PIN-кодів - ось недійсні:

    1. Якщо всі пари однакові цифри: 114422(Примітка: це, очевидно, включатиме всі однакові цифри PIN-кодів).
    2. Все більш лінійні PIN-коди (мод 10): 246802 .
    3. Усі 3 групи - це фізичні лінії на клавіатурі 1 2 3;4 5 6;7 8 9;bksp 0 enter;:147369 .
    4. PIN-код можна повністю розділити на групи з правила 1 і правила 3.


  • Це , тому найкоротший код у байтах виграє!

Чи включає одне правило також одну подвійну пару (як 55123)?
mınxomaτ

@minxomat хороший момент, змінюючи правила для включення обох груп. Це буде з другої половини 123, але 55432буде добре.
Мальтісен

Чи включає правило 3 діагоналі?
Мартін Ендер

6
Іронія полягає в тому, що таке визначення так званого "захищеного" штифта лише зменшує кількість штифтів, нападників, можливо, доведеться до грубої сили!
DankMemes

1
Яка найкоротша довжина для правила 2?
Денніс

Відповіді:


1

Pyth, 120 байт

Arz7VGJ1WJK%"%0*d",HO-^TH1=J|q1l{m%-F_vMcd1T.:K2u|GHmu|GHm?qlk2:k"(.)\\1"0?qlk3}k+++=bcS"123456789"3_Mb.Tb_M.TbZdZ./K0)K

Подумав, що мені слід додати реальну реалізацію тоді. Створює випадкові числа, поки не буде знайдено одне, що відповідає всім вимогам. Можливо, можна багато вдосконалити!

Інтернет-версія


1
Я змінив правила, щоб включити вимогу, що PIN-коди повинні бути випадковими, і всі PIN-коди повинні бути можливими.
Мальтісен

Я думав, що ти можеш :)

0

Перл 5, 244

Починається з генерації випадкових чисел для заданого розміру.
І друкує лише ті, які не відповідають цим обмеженням.

Пошук рішення для ліній клавіатури (без комбінації жорсткого кодування) було якось цікавим.

($k,$l)=@ARGV;$m=10**$l-1;while($n<$k){$_=sprintf("%0".$l."d",int(rand($m)));@N=split//,$_;pop@N;$i=$d=0;while(++$i<@N&&$d<1){$d=$N[$i-1]<=>$N[$i]}$b=$_;$b=~s|\d|@A=split//,$';2*$A[0]-$&-$A[1]==0|eg;if((!m/(\d)\1/)&$b>0&$d>=0){$n++;print$_.$/}}

Тест

$ perl gen_pins.pl 10 5
98121
15931
69042
93730
83458
25312
24601
49468
49490
67012
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.