ตัวเลขนี้เป็นแบบสุ่มหรือไม่?


18

ฉันถามrandom.orgสำหรับจำนวนเต็ม 128 แบบสุ่มระหว่าง 0 และ 2 32 - 1 เนื่องจากตัวสร้างตัวเลขสุ่มนั้นมีความกระตือรือร้นที่จะให้ตัวเลข 64 ตัวแรกก่อนพวกเขาจึงสุ่มมากกว่า 64 คนอื่นอย่างเห็นได้ชัด

เขียนโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบที่ส่งคืนผลลัพธ์ที่เป็นจริงเมื่อหนึ่งใน 64 จำนวนเต็มต่อไปนี้เป็นอินพุต:

[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]

และผลลัพธ์ที่ผิดพลาดสำหรับหมายเลข 64 อื่น ๆ :

[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]

การป้อนข้อมูลอื่นที่ไม่ใช่หนึ่งใน 128 หมายเลขเหล่านี้เป็นพฤติกรรมที่ไม่ได้กำหนดไว้

หากพบวิธีแก้ปัญหาของคุณโดยทางโปรแกรมกรุณาแบ่งปันรหัสที่ใช้สร้างมันขึ้นมา!

นี่คือดังนั้นทางออกที่สั้นที่สุดในหน่วยไบต์ชนะ


19
เนื่องจากตัวสร้างตัวเลขสุ่มให้ 64 หมายเลขแรกก่อนพวกเขาจะต้องสุ่มมากขึ้น ಠ ___ ಠ
Luis Mendo

คุณสามารถแยกความแตกต่างของทั้งสองชุดโมดูโล 834
เครื่องคิดเลข

1
ตัวเลขเหล่านั้นไม่ได้สุ่ม
CalculatorFeline

"Maybe, not enough information."&33 ไบต์ตอบคำถาม
CalculatorFeline

3
@CatsAreFluffy ที่จริงตราบใดที่อินพุตไม่ได้มี 0 หรือ 1 และไม่มีสององค์ประกอบที่แตกต่างกัน 1 คุณสามารถแยกพวกมันออกเป็นโซ่แบบโมดูโล เช่นการแยก[4 20 79]จาก[8 18 100]สามารถทำได้โดย[99 79 20 17 7 4](ดูว่าคุณสามารถมองเห็นรูปแบบ) แน่นอนว่าครึ่งแรกของคำตอบของคุณอาจใช้โมดูโลที่เล็กกว่าอินพุทมาก แต่ครึ่งหลังนั้นมีการขยับองค์ประกอบทีละครั้ง
Sp3000

คำตอบ:


11

CJam, 53 52 47 ไบต์

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

มี unprintables แต่สามารถรับได้สองสาย

[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

ตามลำดับ นอกจากนี้ยังแสดงให้เห็นว่าจุดรหัสต่ำกว่า 256

นี่คือคำตอบโซ่แบบโมดูโลที่เราใช้โมดูโลต่อไปนี้เพื่อป้อนจำนวนเต็มตามลำดับ:

[1153 629 512 378 242 136]

เนื่องจากรายการนี้มีจำนวนเต็มมากกว่า 255 รายการจึงถูกเข้ารหัสโดยใช้สองตัวอักษรต่อตัว การถอดรหัสเสร็จสิ้นโดยการ2/Dfbแยกสตริงออกเป็นส่วน ๆ ของความยาวสองและแปลงแต่ละค่าจากหมายเลขฐาน 13 (เช่น88*13 + 9 = 1153) อย่างไรก็ตามมีข้อยกเว้นสองข้อสำหรับการถอดรหัส:

  • 136ไม่รวมหมายเลขสุดท้าย ( ) (ดูด้านล่าง)
  • ตัวเลขตัวที่สองจะถูกแทนด้วยอักขระตัวเดียวเนื่องจากตัวเลข ( 242) น้อยกว่า 256 และการแบ่งอาร์เรย์ที่มีความยาวคี่เป็นชิ้นขนาด 2 จะทำให้อาร์เรย์ขนาด 1 สิ้นสุด ขอบคุณ @ MartinBüttnerสำหรับเคล็ดลับนี้!

เมื่อโมดูลอสลดจำนวนเต็มเข้าเป็นจำนวนที่ค่อนข้างน้อยเราจะทำการค้นหาจากตาราง ตารางนี้ถูกเข้ารหัสผ่านสตริงที่สองซึ่งถูกแปลงเป็น312หมายเลขฐานแล้วถอดรหัสเป็นฐาน 2 ซึ่งเราสร้างดัชนี เนื่องจากการจัดทำดัชนีอาร์เรย์ของ CJam นั้นเราสามารถละโมดูโลสุดท้ายตามที่กล่าวไว้ก่อนหน้านี้

ลองใช้ออนไลน์ | ชุดทดสอบ


1
คนที่คุณสร้างขึ้นด้วย moduli มายากลได้อย่างไร?
CalculatorFeline

@CatsAreFluffy เพียง DFS ง่าย ๆ ที่มีการ จำกัด จำนวนโมดูล่า การนำไปใช้ในปัจจุบันของฉันค่อนข้างช้าดังนั้นหากฉันรู้สึกว่าโปรแกรมค้างอยู่ชั่วขณะหนึ่งฉันลองใช้จุดเริ่มต้นเริ่มต้นอื่น
Sp3000

DFS คืออะไร (Wikipedia ไม่ได้ช่วย)
CalculatorFeline

@CatsAreFluffy การค้นหาครั้งแรกที่ความลึก
Sp3000

อา. ฉันเพิ่งใช้อัลกอริทึมโลภ
CalculatorFeline

4

เรติน่า 117 ไบต์

([023]3|[067]0|[1289]1|5[5689]|67|96|88|77|65|05)$|^(8|4[358]|7[147]|51|37|30)|865|349|2.{5}5|761|74[348]|728|811|990

คำตอบกอล์ฟ regex ส่งออกจำนวนเต็มบวกสำหรับความจริงและศูนย์สำหรับความเท็จ

ลองออนไลน์! | ชุดทดสอบ - ความจริง | ชุดทดสอบ - เท็จ | Regex101


2

JavaScript (ES6) 233

ฟังก์ชั่นที่ไม่ระบุชื่อกลับมาเป็น 0 falsyและไม่ใช่ศูนย์เป็นtruthy

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

ตรวจสอบตัวเลข 3 หลักสุดท้ายในการแทนตัวเลขในฐาน 36

สตริงการตรวจสอบถูกสร้างขึ้นเพื่อ:

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

ทดสอบ

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 ไบต์

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

ไม่ว่าจะด้วยเหตุผลใดก็ตามชุดของโมดูลัสนั้นมีอยู่ที่อนุญาตให้เราแยกแยะความแตกต่างสองเซตได้ไม่ว่าหลังจากการใช้โมดูลัสหรือไม่ก็ตามผลลัพธ์จะเป็นศูนย์หรือไม่ รายการนี้ถูกสร้างขึ้นโดยโปรแกรมนี้:

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]}}
 ]

เอาท์พุทแรกคือโมดูลัสเอาต์พุตที่สองและสามเป็นสองรายการ รายการยาวสองรายการเป็นชุด


2
คุณอาจบีบอัดบางส่วนของรายการลงในสายอักขระ
njpipeorgan

1

PowerShell, v3 + 194 ไบต์

$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)

วิธีการที่แตกต่างกันเล็กน้อยดังนั้นฉันคิดว่าฉันจะโพสต์มัน มันจะไม่ชนะสั้นที่สุด แต่อาจให้ความคิดกับคนอื่นเพื่อย่อรหัสของพวกเขา

เรายังคงใช้จำนวนเต็มอินพุท$args[0]และนำการปฏิบัติการโมดูโลไปใช้จึงไม่มีอะไรแตกต่างกัน ในข้างต้นเรากำลังใช้-inโอเปอเรเตอร์ (ดังนั้นความต้องการ v3 +) ดังนั้นสิ่งนี้จะได้ผลลัพธ์Trueสำหรับค่าที่อยู่ในกรณีทดสอบจริง

อย่างไรก็ตามฉันพยายามค้นหาอาร์เรย์ผลลัพธ์ที่เราสามารถใช้ประโยชน์จาก ..ฟังก์ชัน range เพื่อลดจำนวนไบต์ แต่ยังคงมีอาร์เรย์ที่แตกต่างกันระหว่างค่าความจริงและค่าเท็จ เราสามารถทำเช่นนี้ได้เนื่องจากพฤติกรรมอื่น ๆ นอกเหนือจากการป้อนข้อมูลความจริง / เท็จเป็นไม่ได้กำหนดดังนั้นหากช่วงจับค่านอกการป้อนข้อมูลความจริง / เท็จมันไม่สำคัญเอาท์พุท

มันเป็นกระบวนการที่ค่อนข้างทำด้วยมือเนื่องจากเป้าหมายคือพยายามค้นหาโมดูโลที่หนึ่งในความจริงหรือเท็จที่มีอาร์เรย์ที่มีช่องว่างขนาดใหญ่ระหว่างตัวเลขและอาเรย์อื่น ๆ มีจำนวนมากในช่องว่างนั้น ฉันส่วนใหญ่ไปด้วยสัญชาตญาณและอุทรความรู้สึกจนถึงตอนนี้ แต่ในที่สุดฉันก็อาจจะเขียนนักสืบเพื่อแก้ปัญหานี้ ด้านบนสั้นที่สุดที่ฉันพบ (ส่วนใหญ่ด้วยตนเอง) ที่ผ่านมา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.