Bu sayı rastgele mi?


18

Random.org'a 0 ve 2 32 - 1 arasında 128 rasgele tamsayı sordum . Rastgele sayı üreteci ilk 64 sayıyı vermek için çok istekli olduğu için, açıkça diğer 64'ten daha rastgele .

Aşağıdaki 64 tamsayıdan biri girildiğinde doğru bir sonuç veren tam bir program veya işlev yazın:

[1386551069, 1721125688, 871749537, 3410748801, 2935589455, 1885865030, 776296760, 614705581, 3841106923, 434616334, 1891651756, 1128215653, 256582433, 310780133, 3971028567, 2349690078, 489992769, 493183796, 3073937100, 3968540100, 777207799, 515453341, 487926468, 2597442171, 950819523, 1881247391, 3676486536, 3852572850, 3498953201, 2544525180, 297297258, 3783570310, 2485456860, 2866433205, 2638825384, 2405115019, 2734986756, 3237895121, 1560255677, 4228599165, 3106247743, 742719206, 2409129909, 3008020402, 328113612, 1081997633, 1583987616, 1029888552, 1375524867, 3913611859, 3488464791, 732377595, 431649729, 2105108903, 1454214821, 997975981, 1764756211, 2921737100, 754705833, 1823274447, 450215579, 976175934, 1991260870, 710069849]

Ve diğer 64 sayı için bir falsey sonucu:

[28051484, 408224582, 1157838297, 3470985950, 1310525292, 2739928315, 3565721638, 3568607641, 3857889210, 682782262, 2845913801, 2625196544, 1036650602, 3890793110, 4276552453, 2017874229, 3935199786, 1136100076, 2406566087, 496970764, 2945538435, 2830207175, 4028712507, 2557754740, 572724662, 2854602512, 736902285, 3612716287, 2528051536, 3801506272, 164986382, 1757334153, 979200654, 1377646057, 1003603763, 4217274922, 3804763169, 2502416106, 698611315, 3586620445, 2343814657, 3220493083, 3505829324, 4268209107, 1798630324, 1932820146, 2356679271, 1883645842, 2495921085, 2912113431, 1519642783, 924263219, 3506109843, 2916121049, 4060307069, 1470129930, 4014068841, 1755190161, 311339709, 473039620, 2530217749, 1297591604, 3269125607, 2834128510]

Bu 128 numaradan biri dışında herhangi bir girdi tanımlanmamış davranıştır.

Çözümünüz programlı olarak bulunursa, lütfen oluşturmak için kullanılan kodu da paylaşın!

Bu , bu nedenle bayttaki en kısa çözüm kazanır.


19
Rastgele sayı üreteci ilk 64 sayıyı ilk verdiğinden, daha rasgele olmalıdırlar ಠ ___ ಠ
Luis Mendo

İki takım modulo 834'ü ayırt edebilirsiniz
CalculatorFeline

1
Bu sayılar rastgele değil.
CalculatorFeline

"Maybe, not enough information."&33 bayt, soruyu cevaplıyor.
CalculatorFeline

3
@CatsAreFluffy Aslında, giriş 0 veya 1 içermediği ve iki öğe 1 ile farklılık göstermediği sürece, bunları bir modulo zinciriyle ayırabilirsiniz. ayıran örneğin [4 20 79]dan [8 18 100]yapılabilir [99 79 20 17 7 4](eğer desen bulunup bulunmadığına bakın). Elbette, cevabınızın ilk yarısı girişten çok daha küçük bir modulo kullanabilir, ancak arka yarısı bir kerede bir eleman kaydırmaktan oluşur.
Sp3000

Yanıtlar:


11

CJam, 53 52 47 bayt

l~"X    0'ò"2/Dfb+:%"gÇâì6Ô¡÷Ç8nèS¡a"312b2b=

Yazdırılamaz, ancak iki dize şu şekilde elde edilebilir:

[88 9 48 5 39 5 29 1 242]:c
[8 103 199 226 236 54 212 15 161 247 199 56 110 232 83 161 97]:c

sırasıyla. Bu, kod noktalarının 256'nın altında olduğunu da gösterir.

Bu, aşağıdaki modülleri giriş tamsayısına sırayla uyguladığımız bir modulo zincir cevabıdır:

[1153 629 512 378 242 136]

Bu liste 255'ten büyük tamsayılar içerdiğinden, liste her biri iki karakter kullanılarak kodlanır. Kod çözme işlemi, 2/Dfbipi iki uzunluktaki parçalara ayıran ve her birini bir taban 13 numarasından (örneğin 88*13 + 9 = 1153) dönüştüren ile yapılır. Ancak, kod çözmenin iki istisnası vardır:

  • Son sayı ( 136) dahil değildir (aşağıya bakın),
  • İkinci son sayı tek bir karakterle temsil edilir, çünkü sayı ( 242) 256'dan küçüktür ve tek uzunluklu bir diziyi 2 boyutundaki parçalara bölmek sonunda bir boyut dizisi bırakacaktır. Bu ipucu için @ MartinBüttner'a teşekkürler!

Modüller giriş tamsayısını nispeten küçük bir sayıya indirdikten sonra, bir tablodan arama yaparız. Bu tablo, bir tabana dönüştürülen ikinci dize ile kodlanır312 numarasına sonra indekslediğimiz 2 tabanına kodu çözülen . CJam'ın dizi indeksleme tamamlandığından, daha önce belirtildiği gibi son modüloyu dışarıda bırakabiliriz.

Çevrimiçi deneyin | Test odası


1
Sizler sihirli modülleri nasıl buluyorsunuz?
CalculatorFeline

@CatsAreFluffy Modül sayısı sınırlaması olan basit bir DFS. Mevcut uygulamam oldukça yavaş, bu yüzden programın bir süre takılı kaldığını düşünüyorsanız, farklı bir başlangıç ​​başlangıç ​​noktası deniyorum.
Sp3000

DFS nedir? (Wikipedia yardımcı olmaz.)
CalculatorFeline

@CatsAreFluffy Derinlik-ilk arama
Sp3000

Ah. Sadece açgözlü bir algoritma kullandım.
CalculatorFeline


2

JavaScript (ES6) 233

0 falsyve sıfır olmayan bir değer döndüren anonim bir işlevtruthy

x=>~"lnhp2wm8x6m9vbjmrqqew9v192jc3ynu4krpg9t3hhx930gu8u9n1w51ol509djycdyh077fd1fnrzv6008ipkh0704161jayscm0l6p4ymj9acbv5ozhjzxo3j1t20j9beam30yptco033c9s3a8jwnre63r29sfbvc5371ulvyrwyqx3kfokbu66mpy9eh" // newline added for readability
.search((x.toString(36)).slice(-3))

Temel 36'daki sayı gösterimindeki son 3 haneyi kontrol etme.

Kontrol dizesi şu şekilde oluşturulmuştur:

a=[1386551069, 1721125688, ... ]
H=x=>(x.toString(36)).slice(-3)
Q=a.map(x=>H(x)).join('')

Ölçek

f=x=>~"lnhp2wm8x6m9vbjmrqqew9v192jc3ynu4krpg9t3hhx930gu8u9n1w51ol509djycdyh077fd1fnrzv6008ipkh0704161jayscm0l6p4ymj9acbv5ozhjzxo3j1t20j9beam30yptco033c9s3a8jwnre63r29sfbvc5371ulvyrwyqx3kfokbu66mpy9eh"
.search((x.toString(36)).slice(-3))

a=[1386551069, 1721125688, 871749537, 3410748801, 2935589455, 1885865030, 776296760, 614705581, 3841106923, 434616334, 1891651756, 1128215653, 256582433, 310780133, 3971028567, 2349690078, 489992769, 493183796, 3073937100, 3968540100, 777207799, 515453341, 487926468, 2597442171, 950819523, 1881247391, 3676486536, 3852572850, 3498953201, 2544525180, 297297258, 3783570310, 2485456860, 2866433205, 2638825384, 2405115019, 2734986756, 3237895121, 1560255677, 4228599165, 3106247743, 742719206, 2409129909, 3008020402, 328113612, 1081997633, 1583987616, 1029888552, 1375524867, 3913611859, 3488464791, 732377595, 431649729, 2105108903, 1454214821, 997975981, 1764756211, 2921737100, 754705833, 1823274447, 450215579, 976175934, 1991260870, 710069849]
b=[28051484, 408224582, 1157838297, 3470985950, 1310525292, 2739928315, 3565721638, 3568607641, 3857889210, 682782262, 2845913801, 2625196544, 1036650602, 3890793110, 4276552453, 2017874229, 3935199786, 1136100076, 2406566087, 496970764, 2945538435, 2830207175, 4028712507, 2557754740, 572724662, 2854602512, 736902285, 3612716287, 2528051536, 3801506272, 164986382, 1757334153, 979200654, 1377646057, 1003603763, 4217274922, 3804763169, 2502416106, 698611315, 3586620445, 2343814657, 3220493083, 3505829324, 4268209107, 1798630324, 1932820146, 2356679271, 1883645842, 2495921085, 2912113431, 1519642783, 924263219, 3506109843, 2916121049, 4060307069, 1470129930, 4014068841, 1755190161, 311339709, 473039620, 2530217749, 1297591604, 3269125607, 2834128510]

A.textContent=a.map(x=>f(x))
B.textContent=b.map(x=>f(x))
<table>
  <tr><th>first 64 - truthy</th></tr><tr><td id=A></td></tr>
  <tr><th>other 64 - falsy</th></tr><tr><td id=B></td></tr>
</table>  


1

Mathematica, 218 217 bayt

Fold[Mod,#,{834,551,418,266,228,216,215,209,205,199,198,195,178,171,166,162,154,151,146,144,139,137,122,120,117,114,110,106,101,98,95,88,84,67,63,61,60,57,55,51,45,44,43,41,40,35,34,30,27,26,25,23,20,14,13,11,10,9}]<1

Her ne sebeple olursa olsun, iki seti, sadece modülleri uyguladıktan sonra, sonuç sıfır olsun ya da olmasın ayırt etmemizi sağlayan bir dizi modül vardır. Modüllerin uzun listesi bu program tarafından oluşturuldu:

Block[{data1, data2, n, mods}, 
 data1 = {1386551069, 1721125688, 871749537, 3410748801, 2935589455, 
   1885865030, 776296760, 614705581, 3841106923, 434616334, 
   1891651756, 1128215653, 256582433, 310780133, 3971028567, 
   2349690078, 489992769, 493183796, 3073937100, 3968540100, 
   777207799, 515453341, 487926468, 2597442171, 950819523, 1881247391,
    3676486536, 3852572850, 3498953201, 2544525180, 297297258, 
   3783570310, 2485456860, 2866433205, 2638825384, 2405115019, 
   2734986756, 3237895121, 1560255677, 4228599165, 3106247743, 
   742719206, 2409129909, 3008020402, 328113612, 1081997633, 
   1583987616, 1029888552, 1375524867, 3913611859, 3488464791, 
   732377595, 431649729, 2105108903, 1454214821, 997975981, 
   1764756211, 2921737100, 754705833, 1823274447, 450215579, 
   976175934, 1991260870, 710069849};
 data2 = {28051484, 408224582, 1157838297, 3470985950, 1310525292, 
   2739928315, 3565721638, 3568607641, 3857889210, 682782262, 
   2845913801, 2625196544, 1036650602, 3890793110, 4276552453, 
   2017874229, 3935199786, 1136100076, 2406566087, 496970764, 
   2945538435, 2830207175, 4028712507, 2557754740, 572724662, 
   2854602512, 736902285, 3612716287, 2528051536, 3801506272, 
   164986382, 1757334153, 979200654, 1377646057, 1003603763, 
   4217274922, 3804763169, 2502416106, 698611315, 3586620445, 
   2343814657, 3220493083, 3505829324, 4268209107, 1798630324, 
   1932820146, 2356679271, 1883645842, 2495921085, 2912113431, 
   1519642783, 924263219, 3506109843, 2916121049, 4060307069, 
   1470129930, 4014068841, 1755190161, 311339709, 473039620, 
   2530217749, 1297591604, 3269125607, 2834128510};
 n = 1;
 mods = {};
 While[Intersection[Mod[data1, n], Mod[data2, n]] != {}, n++];
 FixedPoint[
  (mods = Append[mods, n]; data1 = Mod[data1, n]; 
    data2 = Mod[data2, n]; n = 1;
    While[Intersection[Mod[data1, n], Mod[data2, n]] != {}, n++]; 
    n) &
  , n];
 {mods, {Fold[Mod, data1, mods], Fold[Mod, data2, mods]}}
 ]

Birinci çıktı modüller, ikinci ve üçüncü çıktılar modülleri uygulayan iki listedir. İki uzun liste kümelerdir.


2
Muhtemelen listenin bir kısmını bir dizeye sıkıştırabilirsiniz.
njpipeorgan

1

PowerShell, v3 + 194 bayt

$args[0]%834%653-in(40..45+4,8,12,51,60,64,69,76,84,86,93,97,103,117+137..149+160,162,178+195..209+215..227+255,263+300..329+354,361,386,398,417,443,444+469..506+516,519,535,565,581,586,606,618)

Biraz farklı bir yaklaşım, bu yüzden bunu göndereceğimi düşündüm. En kısa kazanmayacak, ancak kodunu kısaltmak için başka birine fikir verebilir.

Hala giriş tamsayısını $args[0]alıp modulo işlemlerini uyguluyoruz, bu yüzden orada farklı bir şey yok. Yukarıda, -inoperatörü kullanıyoruz (dolayısıyla v3 + gereksinimi), böylece bu çıktıTrue doğruluk testi durumunda olan değerler için çıkacaktır.

Ancak, sonuçta kullanabileceğimiz sonuç dizileri bulmaya çalışıyorum .. bayt sayısını kısaltmak için aralık işlevinden yararlanabileceğimiz, ancak yine de doğruluk ve falsey değerleri arasında farklı dizilere sahip . Bunu doğruluk / falsey girdisi dışındaki davranışlar tanımlanmadığından yapabiliriz, bu nedenle aralık doğruluk / falsey girdisinin dışındaki değerleri yakalarsa, çıktı önemli değildir.

Amaç, gerçek veya falsey dizilerinden birinin sayılar arasında büyük boşluklara ve diğer dizinin bu boşlukta büyük miktarlarda sayıya sahip olduğu modüloyu bulmaya çalışmaktır. Şimdiye kadar çoğunlukla sezgi ve bağırsak hissediyorum hissediyorum, ama sonunda bunu çözmek için kaba-zorlayıcı yazabilirim. Yukarıdaki şimdiye kadar bulduğum en kısa (çoğunlukla manuel).

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.