Bazı Güvenli PIN'ler Oluşturun


17

Kötü alınan bu taşınan postadan ilham alındı .

Şirketinizdeki güvenlik sorumlusu, onu verdikten sonra PIN oluşturma sisteminizle ilgileniyor 12345. Ayrıca pahasına yaptığınız Spaceballs şakasını gerçekten takdir etmedi, bu yüzden PIN jeneratörünü yeniden yazmak için yetkilendirildiniz. Bazı özel donanıma uyması gerektiğinden, onu olabildiğince küçük yapmanız gerekir.

Senin görevin

  • İki giriş alırsınız - PIN sayısı ve rakam olarak PIN boyutu.
  • Belirtilen boyutta belirtilen sayıda PIN'i rastgele oluşturun ve yazdırın.
  • Aynı boyutta olmasalar bile, boyuttaki tüm geçerli PIN'lerin yazdırılması mümkün olmalıdır.
  • Ancak, PIN kodlarında bazı kısıtlamalar vardır - geçersiz olanlar şunlardır:

    1. Tüm çiftler aynı hane ise: 114422(Not: bu açıkça tüm aynı hane PIN'lerini içerecektir).
    2. Giderek doğrusal PIN (mod 10): 246802.
    3. 3 Bütün gruplar arasında tuş takımında fiziksel çizgilerdir 1 2 3;4 5 6;7 8 9;bksp 0 enter;: 147369.
    4. PIN, kural 1 ve kural 3'ten tamamen gruplara ayrılabilir.


  • Bu , bayt en kısa kod kazanır!

Birinci kural tek bir çift çifti de içeriyor 55123mu?
12x15

@minxomat iyi bir nokta, her iki grubu da içerecek şekilde kuralları değiştirir. Bu ikinci yarısından bu yana olacak 123, ama iyi 55432olurdu.
Maltysen

Kural 3'te köşegenler var mı?
Martin Ender

6
İronik olan, "güvenli" bir pimin bu tanımının sadece saldırganların kaba kuvvet uygulamak zorunda kalabileceği pim sayısını azaltmasıdır!
DankMemes

1
Kural 2 için en kısa uzunluk nedir?
Dennis

Yanıtlar:


1

Pyth, 120 bayt

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

O zaman gerçek bir uygulama eklemeliyim diye düşündüm. Tüm gereksinimleri karşılayana kadar rastgele sayılar üretir. Muhtemelen çok geliştirilebilir!

Çevrimiçi sürüm


1
Kuralları, PIN'lerin rasgele olması ve tüm PIN'lerin mümkün olması gerekliliğini içerecek şekilde değiştirdim.
Maltysen


0

Perl 5, 244

Belirli bir boyut için rasgele sayılar üreterek başlar.
Ve sadece kısıtlamalara uymayanları yazdırır.

Tuş takımı satırları için bir çözüm bulmak (hardcoding kombinasyonları olmadan) biraz eğlenceliydi.

($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$_.$/}}

Ölçek

$ perl gen_pins.pl 10 5
98121
15931
69042
93730
83458
25312
24601
49468
49490
67012
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.