이 숫자는 무작위입니까?


18

내가 물었다 random.org를 0과 2 사이 128 임의의 정수에 대한 32 - 난수 생성기 먼저 첫 64 개 자리 숫자를 줄 열심 이었기 때문에 1, 그들은 분명히있어 더 무작위 다른 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

두 세트를 구별 할 수 있습니다 modulo 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

답변:


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 란 무엇입니까? (Wikipedia는 도움이되지 않는다.)
CalculatorFeline

@CatsAreFluffy 깊이 첫 검색
Sp3000

아 방금 탐욕스러운 알고리즘을 사용했습니다.
CalculatorFeline


2

자바 스크립트 (ES6) 233

0을 0으로 falsy, 0이 아닌 값을 반환하는 익명 함수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

어떤 이유로 든, 계수를 적용한 후 결과가 0인지 아닌지 여부만으로 두 세트를 구별 할 수있는 계수 세트가 존재합니다. 모듈러스의 긴 목록은이 프로그램에 의해 생성되었습니다.

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

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.