这个数字是随机的吗?


18

我问random.org为0和2之间的128个随机整数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个数字,他们必须更随机 ಠ___ಠ
路易斯Mendo

您可以区分两组模数834
CalculatorFeline

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

Answers:


11

CJam,53 52 47字节

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

有不可打印的东西,但是两个字符串可以通过

[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,它将字符串拆分成长度为2的块,并分别从基数13转换为整数(例如88*13 + 9 = 1153)。但是,解码有两个例外:

  • 136不包括最后一个数字()(请参见下文),
  • 倒数第二个数字由单个字符表示,因为数字(242)小于256,并且将奇数长度的数组拆分为大小为2的块将在末尾保留大小为1的数组。感谢@MartinBüttner提供的提示!

一旦取模将输入整数减少为一个相对较小的数字,我们就从表中进行查找。该表通过第二个字符串进行编码,该字符串转换为基数,312然后解码为以2为基数的索引。由于CJam的数组索引自动换行,因此我们可以省略前面提到的最终模数。

在线试用 | 测试套件


1
你们如何得出神奇的模数?
CalculatorFeline

@CatsAreFluffy只是一个简单的DFS,其模数限制。我当前的执行速度很慢,因此如果我觉得程序停滞了一段时间,请尝试使用其他初始起点。
Sp3000

什么是DFS?(维基百科无济于事。)
CalculatorFeline

@CatsAreFluffy深度优先搜索
Sp3000

啊。我只是使用贪婪算法。
CalculatorFeline


2

JavaScript(ES6)233

一个匿名函数,返回0 falsy和非零truthy

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

检查以36为底的数字表示形式的最后3位数字。

检查字符串的构建如下:

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

数学,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函数来缩短字节数,但在true和false值之间仍然有不同的数组。我们可以执行此操作,因为未定义真/假输入以外的行为,因此,如果范围捕获的值超出了真/假输入之外,则输出无关紧要。

到目前为止,这是一个相当手动的过程,因为目标是尝试找到真数或假数数组中的一个在数字之间存在较大缺口而另一个数组在该空隙中具有大量数字的模。到目前为止,我大多数时候都是凭直觉和直觉,但是我最终可能会写一个蛮力解决此问题的方法。上面是我到目前为止发现的最短的(大多数是手动的)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.