Banka hesabının şifresini kır!


64

Giriş

Keylogger'ların bir kullanıcının şifresini çalmasını önlemek için, belirli bir banka hesap sistemi aşağıdaki güvenlik önlemini uyguladı: her seferinde yalnızca belirli rakamların girilmesi isteniyor.

Örneğin, hedefinizin şifresi olduğunu söyleyin 89097, sistem onlardan 2., 4. ve 5. basamaklara girmelerini isteyebilir:

997

Veya 1., 3. ve 5. hanelere girmelerini isteyebilir:

807

Tek bildiğiniz, hedefinizin sırayla rakamları girdiği, ancak gerçek şifrede hangi pozisyona ait olduklarını bilmiyorsunuz . Tek bildiğin, 7'den önce gelmesi gereken iki 9 var; ve 8, 0'dan önce ve 0'dan 7'den önce gelir. Bu nedenle, altı olası parola vardır:

80997
89097
89907
98097
98907
99807

Hedefinizin bilgisayarındaki keylogger aylardır şifre girişleri topluyor.

Meydan okuma

Üç basamaklı girişlerin bir listesi göz önüne alındığında, tüm girişler için geçerli olan tüm olası şifreleri çıkar. İşlemsel karmaşıklığı azaltmak ve olası sonuçların miktarını düşük tutmak için, parolanın sayısal olması ve 5 büyüklüğünün sabit olması garantilidir. sonra 2, sonra 3.

Giriş / Çıkış örnekleri

|----------------------|--------------------------------------------|
|         Input        |                   Output                   |
|----------------------|--------------------------------------------|
| [320, 723, 730]      | [37230, 72320, 73203, 73230]               |
| [374, 842]           | [37842, 38742, 83742]                      |
| [010, 103, 301]      | [30103]                                    |
| [123, 124, 125, 235] | [12345, 12354, 12435]                      |
| [239, 944]           | [23944]                                    |
| [111, 120]           | [11201, 11120, 11210, 12011, 12110, 12101] |
| [456, 789]           | []                                         |
| [756, 586]           | [07586, 17586, 27586, 37586, 47586, 57586, 57856, 58756, 67586, 70586, 71586, 72586, 73586, 74586, 75086, 75186, 75286, 75386, 75486, 75586, 75686, 75786, 75806, 75816, 75826, 75836, 75846, 75856, 75860, 75861, 75862, 75863, 75864, 75865, 75866, 75867, 75868, 75869, 75876, 75886, 75896, 75986, 76586, 77586, 78586, 79586, 87586, 97586] |
| [123]                | [00123, 01023, 01123, 01203, 01213, 01223, 01230, 01231, 01232, 01233, 01234, 01235, 01236, 01237, 01238, 01239, 01243, 01253, 01263, 01273, 01283, 01293, 01323, 01423, 01523, 01623, 01723, 01823, 01923, 02123, 03123, 04123, 05123, 06123, 07123, 08123, 09123, 10023, 10123, 10203, 10213, 10223, 10230, 10231, 10232, 10233, 10234, 10235, 10236, 10237, 10238, 10239, 10243, 10253, 10263, 10273, 10283, 10293, 10323, 10423, 10523, 10623, 10723, 10823, 10923, 11023, 11123, 11203, 11213, 11223, 11230, 11231, 11232, 11233, 11234, 11235, 11236, 11237, 11238, 11239, 11243, 11253, 11263, 11273, 11283, 11293, 11323, 11423, 11523, 11623, 11723, 11823, 11923, 12003, 12013, 12023, 12030, 12031, 12032, 12033, 12034, 12035, 12036, 12037, 12038, 12039, 12043, 12053, 12063, 12073, 12083, 12093, 12103, 12113, 12123, 12130, 12131, 12132, 12133, 12134, 12135, 12136, 12137, 12138, 12139, 12143, 12153, 12163, 12173, 12183, 12193, 12203, 12213, 12223, 12230, 12231, 12232, 12233, 12234, 12235, 12236, 12237, 12238, 12239, 12243, 12253, 12263, 12273, 12283, 12293, 12300, 12301, 12302, 12303, 12304, 12305, 12306, 12307, 12308, 12309, 12310, 12311, 12312, 12313, 12314, 12315, 12316, 12317, 12318, 12319, 12320, 12321, 12322, 12323, 12324, 12325, 12326, 12327, 12328, 12329, 12330, 12331, 12332, 12333, 12334, 12335, 12336, 12337, 12338, 12339, 12340, 12341, 12342, 12343, 12344, 12345, 12346, 12347, 12348, 12349, 12350, 12351, 12352, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12403, 12413, 12423, 12430, 12431, 12432, 12433, 12434, 12435, 12436, 12437, 12438, 12439, 12443, 12453, 12463, 12473, 12483, 12493, 12503, 12513, 12523, 12530, 12531, 12532, 12533, 12534, 12535, 12536, 12537, 12538, 12539, 12543, 12553, 12563, 12573, 12583, 12593, 12603, 12613, 12623, 12630, 12631, 12632, 12633, 12634, 12635, 12636, 12637, 12638, 12639, 12643, 12653, 12663, 12673, 12683, 12693, 12703, 12713, 12723, 12730, 12731, 12732, 12733, 12734, 12735, 12736, 12737, 12738, 12739, 12743, 12753, 12763, 12773, 12783, 12793, 12803, 12813, 12823, 12830, 12831, 12832, 12833, 12834, 12835, 12836, 12837, 12838, 12839, 12843, 12853, 12863, 12873, 12883, 12893, 12903, 12913, 12923, 12930, 12931, 12932, 12933, 12934, 12935, 12936, 12937, 12938, 12939, 12943, 12953, 12963, 12973, 12983, 12993, 13023, 13123, 13203, 13213, 13223, 13230, 13231, 13232, 13233, 13234, 13235, 13236, 13237, 13238, 13239, 13243, 13253, 13263, 13273, 13283, 13293, 13323, 13423, 13523, 13623, 13723, 13823, 13923, 14023, 14123, 14203, 14213, 14223, 14230, 14231, 14232, 14233, 14234, 14235, 14236, 14237, 14238, 14239, 14243, 14253, 14263, 14273, 14283, 14293, 14323, 14423, 14523, 14623, 14723, 14823, 14923, 15023, 15123, 15203, 15213, 15223, 15230, 15231, 15232, 15233, 15234, 15235, 15236, 15237, 15238, 15239, 15243, 15253, 15263, 15273, 15283, 15293, 15323, 15423, 15523, 15623, 15723, 15823, 15923, 16023, 16123, 16203, 16213, 16223, 16230, 16231, 16232, 16233, 16234, 16235, 16236, 16237, 16238, 16239, 16243, 16253, 16263, 16273, 16283, 16293, 16323, 16423, 16523, 16623, 16723, 16823, 16923, 17023, 17123, 17203, 17213, 17223, 17230, 17231, 17232, 17233, 17234, 17235, 17236, 17237, 17238, 17239, 17243, 17253, 17263, 17273, 17283, 17293, 17323, 17423, 17523, 17623, 17723, 17823, 17923, 18023, 18123, 18203, 18213, 18223, 18230, 18231, 18232, 18233, 18234, 18235, 18236, 18237, 18238, 18239, 18243, 18253, 18263, 18273, 18283, 18293, 18323, 18423, 18523, 18623, 18723, 18823, 18923, 19023, 19123, 19203, 19213, 19223, 19230, 19231, 19232, 19233, 19234, 19235, 19236, 19237, 19238, 19239, 19243, 19253, 19263, 19273, 19283, 19293, 19323, 19423, 19523, 19623, 19723, 19823, 19923, 20123, 21023, 21123, 21203, 21213, 21223, 21230, 21231, 21232, 21233, 21234, 21235, 21236, 21237, 21238, 21239, 21243, 21253, 21263, 21273, 21283, 21293, 21323, 21423, 21523, 21623, 21723, 21823, 21923, 22123, 23123, 24123, 25123, 26123, 27123, 28123, 29123, 30123, 31023, 31123, 31203, 31213, 31223, 31230, 31231, 31232, 31233, 31234, 31235, 31236, 31237, 31238, 31239, 31243, 31253, 31263, 31273, 31283, 31293, 31323, 31423, 31523, 31623, 31723, 31823, 31923, 32123, 33123, 34123, 35123, 36123, 37123, 38123, 39123, 40123, 41023, 41123, 41203, 41213, 41223, 41230, 41231, 41232, 41233, 41234, 41235, 41236, 41237, 41238, 41239, 41243, 41253, 41263, 41273, 41283, 41293, 41323, 41423, 41523, 41623, 41723, 41823, 41923, 42123, 43123, 44123, 45123, 46123, 47123, 48123, 49123, 50123, 51023, 51123, 51203, 51213, 51223, 51230, 51231, 51232, 51233, 51234, 51235, 51236, 51237, 51238, 51239, 51243, 51253, 51263, 51273, 51283, 51293, 51323, 51423, 51523, 51623, 51723, 51823, 51923, 52123, 53123, 54123, 55123, 56123, 57123, 58123, 59123, 60123, 61023, 61123, 61203, 61213, 61223, 61230, 61231, 61232, 61233, 61234, 61235, 61236, 61237, 61238, 61239, 61243, 61253, 61263, 61273, 61283, 61293, 61323, 61423, 61523, 61623, 61723, 61823, 61923, 62123, 63123, 64123, 65123, 66123, 67123, 68123, 69123, 70123, 71023, 71123, 71203, 71213, 71223, 71230, 71231, 71232, 71233, 71234, 71235, 71236, 71237, 71238, 71239, 71243, 71253, 71263, 71273, 71283, 71293, 71323, 71423, 71523, 71623, 71723, 71823, 71923, 72123, 73123, 74123, 75123, 76123, 77123, 78123, 79123, 80123, 81023, 81123, 81203, 81213, 81223, 81230, 81231, 81232, 81233, 81234, 81235, 81236, 81237, 81238, 81239, 81243, 81253, 81263, 81273, 81283, 81293, 81323, 81423, 81523, 81623, 81723, 81823, 81923, 82123, 83123, 84123, 85123, 86123, 87123, 88123, 89123, 90123, 91023, 91123, 91203, 91213, 91223, 91230, 91231, 91232, 91233, 91234, 91235, 91236, 91237, 91238, 91239, 91243, 91253, 91263, 91273, 91283, 91293, 91323, 91423, 91523, 91623, 91723, 91823, 91923, 92123, 93123, 94123, 95123, 96123, 97123, 98123, 99123] |
|----------------------|--------------------------------------------|

kurallar

  • Giriş boş değil garanti edilir.
  • Önde gelen ve sondaki sıfırlar önemlidir: Her iki paroladan 01234farklıdır 12340ve 1234parola kırmaz. Gerçek şifrelerin nasıl çalıştığını düşünün!
  • Standart I / O kuralları geçerlidir.
  • Standart boşluklar yok .
  • Bu , yani bayt cinsinden en kısa cevap kazanır. Kodlamayan diller açıktır!

5
Rakamlar her zaman sırada mı? Test durumlarına göre sanırım öyleydi, ancak onu okumadığım sürece kurallarda bahsedildiğini göremedim.
Kevin Cruijssen

13
PPCG'ye Hoşgeldiniz! Bu güzel, iyi yapılandırılmış ve özenle biçimlendirilmiş bir ilk zorluktur. Ev ödevini açıkça anlattın, her şeyi mahvetmek kadar. Cevaplamayı dört gözle bekliyorum (eğer biri önce R'de cevap vermezse!). Gelecekte, ana alana göndermeden önce geri bildirim almak için sanal alanı kullanmanızı öneririz . PPCG'de vaktinizi beğeneceğinizi umuyoruz!
Giuseppe

1
@Giuseppe, teşekkürler! Bu sitedeki soruları yıllardır anonim olarak okudum ve birkaç aydır yazıp ince ayar yapıyorum ve bu sorunu çözüyorum: Sandbox'ı atlamak için yeterince hoşuma gitti. Oraya ilk sefere gönderirim!
cefel

2
@Arnauld Peki, şifreniz 01234 veya 12340 ise, 1234 yazarak giriş yapamamanız gerekir. Şifreler, rakamlardan oluşsa bile, en azından bu anlamda, bir rakamdan daha fazla bir dizedir. Yani evet, önde gelen ve sondaki sıfırlar zorunludur.
cefel

2
Son test olayı 22123 eksik ... bir şeyi yanlış anlamadığım sürece mi?
Jonah

Yanıtlar:


24

Python, 100 bayt

lambda e,d='%05d':[d%i for i in range(10**5)if all(re.search('.*'.join(x),d%i)for x in e)]
import re

Çevrimiçi deneyin!

Python 2 ve Python 3 ile çalışır.

( Python 3.8'da 97 bayt :)

lambda e:[p for i in range(10**5)if all(re.search('.*'.join(x),p:='%05d'%i)for x in e)]
import re

1
Bu çok güzel bir çözüm ...
Jonah

1
3.8 olmayan kodunuz, dizenin diğer adıyla "fakir adamın atama ifadesini" yapabilir '%05d'.
xnor

22

05AB1E , 11 9 bayt

žh5ãʒæIåP

Çevrimiçi deneyin!

açıklama

žh          # push 0123456789
  5ã        # 5 times cartesian product
    ʒ       # filter, keep only values are true under:
     æ      # powerset of value
      Iå    # check if each of the input values are in this list
        P   # product

12

JavaScript (ES6), 88 bayt

İle sonuçları yazdırır alert().

a=>{for(k=n=1e5;n--;)a.every(x=>(s=([k]+n).slice(-5)).match([...x].join`.*`))&&alert(s)}

Çevrimiçi deneyin!

Yorumlananlar

a => {                    // a[] = input array of 3-character strings
  for(k = n = 1e5; n--;)  // initialize k to 100000; for n = 99999 to 0:
    a.every(x =>          // for each string x = 'XYZ' in a[]:
      ( s =               //   define s as the concatenation of
          ([k] + n)       //   '100000' and n; e.g. '100000' + 1337 -> '1000001337'
          .slice(-5)      //   keep the last 5 digits; e.g. '01337'
      ).match(            //   test whether this string is matching
        [...x].join`.*`   //   the pattern /X.*Y.*Z/
      )                   //
    ) &&                  // end of every(); if all tests were successful:
      alert(s)            //   output s
}                         //

8

Haskell, 81 80 78 76 bayt

f x=[p|p<-mapM(:['1'..'9'])"00000",all(`elem`(concat.words<$>mapM(:" ")p))x]

Haskell'deki açık kaba kuvvet yaklaşımı: olası tüm şifrelerin bir listesini oluşturdu ve girdi listesindeki tüm öğelerin ilgili alt listelerdeyken kalmasını sağlayın.

Çevrimiçi deneyin!

Düzenleme: @ xnor sayesinde -1 bayt, @ H.PWiz sayesinde -2 -4 bayt sayesinde


1
Kendini biraz daha kısa hesaplayabilir gibi görünüyor .
xnor

1
concat.words<$>mapM(:" ")pdaha kısa
H.PWiz

3
p<-mapM(:['1'..'9'])"00000"2 bayttan daha fazla tasarruf etmek için kullanın
H.PWiz


5

Pyth, 11 bayt

f<QyT^s`MT5

Bir dizi dizge olarak girdi alır.
Burada dene

açıklama

f<QyT^s`MT5
      s`MT      Take the digits as a string.
     ^    5     Take the Cartesian product with itself 5 times.
f   T           Filter the ones...
 <Qy            ... where the input is a subset of the power set.


5

Python 3 , 98 bayt

f=lambda l,s='':any(l)or print(s)if s[4:]else[f([x[x[:1]==c:]for x in l],s+c)for c in'0123456789']

Çevrimiçi deneyin!

Tekrar tekrar her beş basamaklı sayı dizgisini girmeye çalışır s, lhala kalan vurgular takip edilir. Hepsi sonunda boşsa, sonucu yazdırır.

Python 3.8 (yayın öncesi) , 94 bayt

lambda l:[s for n in range(10**5)if all(''in[x:=x[x[:1]==c:]for c in(s:='%05d'%n)]for x in l)]

Çevrimiçi deneyin!

Ödev ifadelerinin gücüne bakın ! Sırası kontrol etmek için yöntemi buradan kullanır .



4

Retina , 53 bayt

~(`
.$*
m`^
G`
^
K`¶5+%`$$¶0"1"2"3"4"5"6"7"8"9¶
"
$$"

Çevrimiçi deneyin! Açıklama:

~(`

Komut dosyasını yürüttükten sonra, sonucu yeni bir komut dosyası olarak alın ve bunu da yürütün.

.$*

.*Her yere yerleştirin . Bu , .*3.*2.*0.*sadece ihtiyacımız olmasına rağmen 3.*2.*0, önemli olmamasına neden olur.

m`^
G`

G`Her satırın başına bir a ekleyin . Bu onu bir Retina Grep komutuna dönüştürür.

^
K`¶5+%`$$¶0"1"2"3"4"5"6"7"8"9¶
"
$$"

İki daha Retina komutunu önekleyin. Sonuçta ortaya çıkan komut dosyası şöyle görünecektir:

K`

Tamponu temizleyin (orijinal girişi içeren).

5+

5 kez tekrarlayın ...

%`$

... her satıra ekle ...

0$"1$"2$"3$"4$"5$"6$"7$"8$"9

... rakam 0, sonra satırın bir kopyası, sonra rakam 1, vb 9. Bu, ndöngülerden sonra her nnumara numarasına sahip olacağınız anlamına gelir .

G`.*3.*2.*0.*
G`.*7.*2.*3.*
G`.*7.*3.*0.*

Girdiye göre olası sayıları filtreleyin.


4

R , 80 82 bayt

Reduce(intersect,lapply(gsub("",".*",scan(,"")),grep,sprintf("%05d",0:99999),v=T))

İşte regex kullanarak bir baz R çözümü. Bu iç içe geçmiş fonksiyon dizisini yazmak, magrittr paketini nasıl değerlendirebileceğimi anlamamı sağladı!

Başlangıçta girdi ile ilgili kuralları okumamıştım, bu yüzden şimdi stdin'den okundu (thanks @KirillL).

Çevrimiçi deneyin!


@digEmTüm 82 bayt olduğunu söylüyor, değil mi? Girişteki baş sıfırlar potansiyeli nedeniyle tam sayıları kullanamazsınız.
Nick Kennedy

); Üzgünüm, başlık okumak ve bilinçsiz bunun strikedthrough olduğunu fark etmeden az sayıda aldı ... ve evet, üzgünüm tekrar dize girişi hakkında haklısın
digEmAll

2

Ruby , 79 77 bayt

->x{(0...1e5).map{|i|'%05d'%i}.select{|i|x.all?{|c|i=~/#{c.gsub('','.*')}/}}}

Çevrimiçi deneyin!

Giriş bir dizi dizisidir.

İşte aynı kodun daha okunaklı bir versiyonu:

def f(codes)
  (0...10**5).map{|i| '%05d'%i}.select do |i|
    codes.all? do |code|
      i =~ Regexp.new(code.chars.join('.*'))
    end
  end
end

BTW, yaklaşımınız olarak da üst değerini biçimlendirerek ve benim versiyonunda olduğu gibi, -2 fazla bayt dizisi girdi yakmak için geçiş yaparak kısa yapılabilir 1e5gibi bu
Kirill L.

@KirillL. -2 bayt için teşekkürler. Giriş biçimini değiştirmeyeceğim çünkü cevabım sizinkine çok benzeyecek. Şerefe!
Eric Duminil

2

PHP 128 bayt

for(;$i++<1e5;$k>$argc||print$s)for($k=0;$n=$argv[++$k];)preg_match("/$n[0].*$n[1].*$n[2]/",$s=sprintf("%05d
",$i-1))||$k=$argc;

veya

for(;$i<1e5;$i+=$k<$argc||print$s)for($k=0;$n=$argv[++$k];)if(!preg_match("/$n[0].*$n[1].*$n[2]/",$s=sprintf("%05d
",$i)))break;

komut satırı argümanlarından girdi almak. Çevrimiçi olarak koşun -nrveya deneyin .



2

Japt, 21 bayt

1e5o ù'0 f@e_XèZË+".*

Dene!

1e5o ù'0 f@e_XèZË+".*    # full program

1e5o                     # generate numbers under 100k
     ù'0                 # left pad with 0's
         f@              # filter array
           e_            # check every element of input array
             Xè          # X is the number to be tested.
                         # test it against a regex.
               ZË+".*    # the regex is an element from the input array
                         # with wildcards injected between each character

@Shaggy sayesinde -2 bayt!


daha az işe yaramaz değişkenler:: 1e5o ù'0 fA{Ue@AèX®+".*P
ASCII-sadece

ayrıca 23:1e5o ù'0 fA{Ue@AèX¬q".*
ASCII-sadece


İlginç ... return X,Y,ZSon terimi seçeceğimi bilmiyordum . Ipuçları için teşekkürler :)
dana

1
@dana; Evet, bu bir JavaScript özelliğidir: tio.run/##y0osSyxOLsosKNHNy09J/Z9m@1@jQqdS09auuii1pLQoTwHIq/…
Shaggy

2

C # (Visual C # Etkileşimli Derleyici) , 116 bayt

x=>{for(int i=0;i<1e5;){var s=$"{i++:D5}";if(x.All(t=>t.Aggregate(-6,(a,c)=>s.IndexOf(c,a<0?a+6:a+1))>0))Print(s);}}

Çevrimiçi deneyin!

// x: input list of strings
x=>{
  // generate all numbers under 100k
  for(int i=0;i<1e5;){
    // convert the current number to
    // a 5 digit string padded with 0's
    var s=$"{i++:D5}";
    // test all inputs against the 5 digit
    // string using an aggregate.
    // each step of the aggregate gets
    // the index of the next occurrence
    // of the current character starting
    // at the previously found character.
    // a negative index indicates error.
    if(x.All(t=>t
             .Aggregate(-6,(a,c)=>
               s.IndexOf(c,a<0?a+6:a+1)
             )>0))
      // output to STDOUT
      Print(s);
  }
}

EDIT: aynı karakterin bir defadan fazla sayıldığı bir hatayı düzeltti. Örneğin 000, kaydedilmişse, tekli içeren tüm şifreleri döndürmek için kullanılan işlev 0.



1

K 67 bayt

{n@&{&/y in\:x@/:&:'a@&3=+/'a:(5#2)\:'!32}[;x]'n:{"0"^-5$$x}'!_1e5}

K (çok) ilkel bir regex yeteneğine sahip, bu yüzden farklı bir yaklaşım denedim.

{...} bir lambda tanımlar. Örnek kullan:{...}("320";"723";"730")

döner ("37230";"72320";"73203";"73230")

  • n 0.9999 aralığında 0 dizeli dizeler olan tam sayıların listesidir.

    • _1e5 zemini 1e5 (bilimsel gösterim) şamandıraya uygular

    • !_1e5 tamsayı listesini oluşturur

    • {..}'!_1e5 0.99999’da her değere lambda uygular.

    • $x x argümanını x (implicit arg) dizgiye dönüştür

    • -5$$xdoğru boyut 5 (ex alanına dize $ x ayarlayın. -5$$12oluşturur" 12"

    • "0"^stringbu nedenle, "0" karakter ile boşlukları yerine "0"^-5$$12üretir"00012"

  • a 0..31 aralığında 5-bit değerler olarak tamsayıların listesidir.

    • !32 değerleri 0..31 oluşturmak

    • (5#2) 2 beş kez tekrarlayın (liste 2 2 2 2 2)

    • (5#2)\:'!32 0 aralığında her değer için 5-bit değerler (2-temel beş kez) oluşturur

  • a'nın değerlerini tam olarak 3 olanla filtreleriz. Değerler desen bulunabilir tüm kombinasyonları (yer) olduğu: 11100 11010 11001 10110 10101 10011 01110 01101 01011 00111. Ör. "abc" kalıbı için regexs ile eşitliğe sahibizabc?? ab?c? ab??c a?bc? a?b?c a??bc ?abc? ?ab?c ?a?bc ??abc?

    • +\'a Her ikili gösterimin toplamını hesaplar (olanların sayısını)

    • 3=+\'a boolean listesi oluşturur (eğer her bir değerin tam olarak 3 değeri varsa)

    • a@&3=+\'a "a burada 3 = + \ 'a doğru" olarak okuyor

  • Önceki yerler için endeks listesi oluşturur: (0 1 2; 0 1 3; 0 1 4; 0 2 3; 0 2 4; 0 3 4; 1 2 3; 1 2 4; 1 3 4; 2 3 4)ve bir şifre için girilen olası değerler (x)

    • &:' "her biri" olarak okur, ikili kodlu tam sayıların listesine uygulanır ve her 1 bitin dizinlerini hesaplar

    • x@/: Dizin listesindeki her bir elemana parola x uygular (girilen tüm değerleri oluşturur)

  • Tüm desenlerin girilen tüm olası değerler listesinde olup olmadığını belirler.

    • y desen listesini gösteren argümandır

    • y in\: sağdaki listede her y değeri olarak okur

    • &/bitti "ve bitti". &/y in\:..y içindeki tüm kalıplar listede bulunursa true değerini döndürür.

  • Sonunda, lambda'yı doğrulayan her dizinde n'deki her dizgiyi döndür.

    • n@&{..} "n, lambda {..} 'nın true döndürdüğü yerde" okur

0

C (GCC) 222 bayt

#define C(p)*f-p?:++f;
#define I(x,y)x<10?:++y,x%=10;
a,b,c,d,e;f(int**H){for(;a<10;){int**h=H,*f,g=0;for(h=H;*h;){f=*h;C(a)C(b)C(c)C(d)C(e)f>*h+++2?:(g=1);}g?:printf("%d%d%d%d%d,",a,b,c,d,e);++e;I(e,d)I(d,c)I(c,b)I(b,a)}}

Çevrimiçi deneyin

Çağrı kodu

int main() {
  int hint1[5] = {9,9,7,-1,-1};
  int hint2[5] = {8,0,7,-1,-1};
  int* hints[3] = {hint1,hint2,0};
  f(hints);
}

Çıktı

80997,89097,89907,98097,98907,99807,

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.