この番号はランダムですか?


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

次の2つのセットが834を法と区別することができます
CalculatorFeline

1
これらの数字はランダムではありません。
電卓

"Maybe, not enough information."&33バイト、質問に答えます。
電卓

3
@CatsAreFluffy実際には、入力に0または1が含まれておらず、2つの要素の差が1でない限り、モジュロチェーンでそれらを区切ることができます。たとえば[4 20 79]、からの分離は(パターンを見つけることができるかどうかを参照)[8 18 100]によって行うことができます[99 79 20 17 7 4]。もちろん、答えの最初の半分は入力よりもはるかに小さいモジュロを使用するかもしれませんが、後ろ半分は一度に1つの要素をシフトすることで構成されます。
Sp3000

回答:


11

CJam、53 52 47バイト

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

印刷できないものもありますが、2つの文字列は次のようにして取得できます

[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つの文字を使用してエンコードされます。デコードは2/Dfb、文字列を長さ2のチャンクに分割し、それぞれをベース13の数値から変換します(例:88*13 + 9 = 1153。ただし、デコードには2つの例外があります。

  • 最後の番号(136)は含まれません(以下を参照)。
  • 最後から2番目の数字は、数字(242)は256未満であり、奇数長の配列をサイズ2のチャンクに分割すると、サイズ1の配列が最後に残るため、ます。このヒントをありがとう@MartinBüttner!

モジュロが入力整数を比較的小さな数に減らしたら、テーブルからルックアップを実行します。このテーブルは、ベースに変換される2番目の文字列を介してエンコードされます312番号にベース2にデコードされてインデックス付けされます。CJamの配列インデックス付けはラップするため、前述のように最終モジュロを省くことができます。

オンラインで試す | テストスイート


1
あなたはどのようにして魔法のモジュラスを思い付きますか?
電卓

@CatsAreFluffyモジュロ数に制限のある単純なDFS。私の現在の実装は非常に遅いため、プログラムがしばらく動かなくなったように感じたら、別の最初の開始点を試します。
Sp3000

DFSとは何ですか?(ウィキペディアは役に立ちません。)
CalculatorFeline

@CatsAreFluffy深さ優先検索
-Sp3000

あ。欲張りアルゴリズムを使用しました。
電卓


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

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

何らかの理由で、モジュライを適用した後、結果がゼロかどうかだけで2つのセットを区別できるモジュライのセットが存在します。モジュラスの長いリストは、このプログラムによって生成されました。

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番目と3番目の出力は2つのリストで、モジュラスが適用されています。2つの長いリストがセットです。


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真実のテストケースにある値に対してれます。

しかし、私は私たちが活用できる結果の配列を見つけようとしています ..範囲関数をしてバイトカウントを短縮、真の値と偽の値の間に明確な配列が存在するいます。真実/偽の入力以外の動作は未定義なので、これを行うことができます。したがって、範囲が真実/偽の入力以外の値をキャッチする場合、出力は問題になりません。

目標は、真実または偽の配列のいずれかが数字の間に大きなギャップを持ち、他の配列がそのギャップに大量の数字を持っているモジュロを見つけようとするので、これまでのところかなり手作業のプロセスです。私はこれまでほとんど直感と直感で行ってきましたが、最終的にはこれを解決するためにブルートフォーサーを書くかもしれません。上記は、私がこれまでに発見した最短(ほとんど手作業)です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.