"i"는 "i"발생 가능성이 있습니다


10

i 번째 숫자가 모든 0 <i <14에 대해 i % 발생 확률을 갖는 난수 생성기를 설계하십시오. 0은 정확히 9 % 발생 확률을 가져야합니다. 생성기의 시드는 시스템 시간이어야합니다. 난수 생성에 사전 정의 된 기능을 사용할 수 없습니다.

기본적으로 1은 1 %의 확률로 발생하고, 2는 2 %의 확률로 발생하며 13 개까지는 13 %의 확률로 발생합니다. 이것은 코드 골프이므로 가장 짧은 코드가 승리합니다.


7
다른 9 % 확률은 어떻습니까?
LegionMammal978

@ LegionMammal978 이미 지정했습니다. 0으로 인쇄해야합니다.
ghosts_in_the_code

예, 이제 괜찮습니다. 앞서 문제가 무엇입니까?
ghosts_in_the_code

@ghosts_in_the_code <불평등과 >인용 블록에서 HTML 태그를 구성하고있었습니다.
Martin Ender

2
초의 해상도는 괜찮습니까?
xnor

답변:


13

CJam, 14 바이트

E,_T9t\]ze~es=

여기에서 테스트하십시오.

설명

E,   e# Push [0 1 2 ... 12 13].
_    e# Make a copy.
T9t\ e# Set the first element to 9. Swap with the original range.
]z   e# Wrap them in an array and transpose to get [[9 0] [1 1] [2 2] ... [13 13].
e~   e# Run-length decode to get `[0 0 0 0 0 0 0 0 0 1 2 2 3 3 3 ... 13 13 ... 13 13].
es=  e# Use the current timestamp as a cyclic index into this array.

음, 왜 안돼 mR?
옵티 마이저

1
@Optimizer "제너레이터의 시드는 시스템 시간이어야합니다. 난수 생성에 사전 정의 된 기능을 사용할 수 없습니다."
Martin Ender

아, 그 부분을 놓쳤다.
옵티 마이저

7

파이썬 2, 54

import time
print((time.time()*1e4%800+1)**.5+1)//2%14

이 식은 f(t) = ((8*t+1)**.5+1)//2구간을 매핑하여 균일 분포를 삼각 정수 분포로 변환합니다.

[0,1)  --> 1
[1,3)  --> 2
[3,6)  --> 3
[6,10) --> 4
...

를 수행하여 시간의 밀리 초 숫자를 0에서 100 사이의 균일 부동 소수점으로 변환합니다 time.time()*1e4%100. 실제로, %800변환 단계에서 8을 곱하여 바꿉니다. 결국 14를 수행하여 14를 0으로 변환합니다 %14.



4

Dyalog APL , 20 바이트

⊃(⌊.1×⊃⌽⎕TS)↓(/⍨⍳13)

⍳13정수 1-13
(/⍨)자체 복제, 예 : /⍨3is 3 3 3and /⍨2 3is 2 2 3 3 3
n ... n 개 요소 삭제 ( n > 목록 길이 인 경우 빈 목록 유지)
⎕TS시스템 타임 스탬프 예 : 2015 11 1 13 28 56 834
⊃⌽마지막 요소, 즉 현재 밀리 초 0-999
⌊.1×곱하기 0.1을 사용하고
첫 번째 요소를 내림 하면 데이터가 비어 있으면 0이됩니다.


3

3, 65 55 74 바이트 처리

long i=0,c=8,r=System.nanoTime()%100;for(;r>c;i++,c+=i);print(i);

0에서 99까지의 난수를 가져옵니다 (포함). 숫자가 0-8이면 0을 인쇄하고, 9 인쇄 1이면, 10-11 인쇄 2이면, 12-14 인쇄 3이면 ...

아무도 눈치 채지 못했지만 이전 코드의 문제점은 millis ()가 응용 프로그램이 실행 된 시간을 반환한다는 것입니다. 적어도 지금 우리는 나노 정밀도를 가지고 있습니다!


2

PHP, 50 바이트

<?for($t=microtime()*100;0<=$t-=++$i;)?><?=$i%14;
  • microtime"0.04993000 1446409253"과 같은 문자열로 시간을 반환합니다.이 값에 100을 곱하면 PHP는 문자열을 0.04993000, 결과 4.993000로 강제 변환합니다. 따라서 $t"임의의"숫자로 초기화됩니다[0,100)
  • $t0에 도달 할 때까지 1, 2, 3, ...을 뺍니다.
  • 결과는 마지막 빼기 수, 모듈로 14입니다

동일한 바이트 수에 대해 실제로 ;echo대신 대신 쓸 수 있습니다 ?><?=. 그러나 잘했다!
Ismael Miguel

1

Python3, 86 바이트

똑바로 :

import time;print(sum([[i]*i for i in range(1,14)],[0]*9)[int(str(time.time())[-2:])])

1

J-28 자

이것은 바보 같았습니다.

{:({:1e3*6!:0'')$100{.#~i.14

6!:0''현재 Y M D h m s시간은 6 개 항목 목록으로, 밀리 초는 초 단위로 표시됩니다.이를 얻기 위해 초 ( {:) 에을 곱하는 것 외에는 선택의 여지가 없습니다 1e3. 한편, #~i.140 0, 1 1, 2 2 등 13에서 13까지의 목록이며, 100으로 항목을 채 웁니다 100{..

J는 주기적 인덱싱이 없으므로 큰 목록을 인덱싱하기 전에 밀리 초 모듈로 100을 사용하는 유혹을 느낄 수 있습니다. 그러나, 우리는 사용하여 두 개의 문자를 저장할 수 있습니다 $대신하기 위해 주기적으로 확장 우리는 (어디 0에서 얻을 그러나 밀리 초 단위로 100 항목 목록 60999를 ) 다음 마지막 항목을.

60000 요소 목록이 사용 된 메모리가 많거나 다른 것이 아니라 과도하게 느껴집니다 : P


1

자바 스크립트 (ES6) 116

이것은 시드 할 수없는 자바 스크립트의 표준 RNG 대신 사용했던 간단한 시드 RNG 의 적응입니다 (따라서 반복 할 수는 없습니다)

R=(s=~new Date,p=[],i=0,j=9)=>{
while(p.push(i)<100)--j?0:j=++i;
return _=>(s=(1+Math.sin(s))*1e5,p[100*(s-~~s)|0])
};

// test

var rnd=R()

t=[0,0,0,0,0,0,0,0,0,0,0,0,0,0];
rgb='000,444,666,888,aaa,ddd,f0f,ff0,0ff,0ff,0f0,00f,f00,fff'.split`,`
.map(v=>(v=parseInt(v,16),[(v&15)*17,(v>>4&15)*17,(v>>8)*17]))

cnt=400*300
//for (i=0;i<cnt;i++)t[rnd()]++;

ctx = C.getContext("2d");
img=ctx.getImageData(0, 0, 400, 300)
for(p=0,y=0;y<300;y++)for(x=0;x<400;x++)
  v=rnd(),t[v]++,
  img.data[p++]=rgb[v][0],img.data[p++]=rgb[v][1],
  img.data[p++]=rgb[v][2],img.data[p++]=255
ctx.putImageData(img, 0, 0)

o=''
for(i=0;i<14;i++)
  t[i]/=cnt, o+=`<p><i>${i}</i><b style="width:${t[i]*300}%">,</b>${(t[i]*100).toFixed(2)}%</p>`;
G.innerHTML=o
#G { width: 400px; font-size: 12px; border: 1px solid #000;  }
p { margin: 0}
b { display: inline-block; font-size:80%; background: #08c; margin: 2px }
i { display: inline-block; width: 20px; text-align: right; padding: 0 4px }
#C { width: 400px; height: 300px; }
<div id=G></div>
<canvas id=C></canvas>


나는 반환 값이 실제로 요구 사항에 가깝다는 것을 증명하는 방법을 정말 좋아합니다. 잘 했어요! 그 캔버스에 +10!
Ismael Miguel

0

TI-BASIC, 18 바이트

real(int(.5+2√(-4+50fPart(sub(getTime

100fPart(sub(getTime0과 99 사이의 임의의 잔류 물을 얻는 제 (N-1) 번째의 삼각형의 개수는 동일하다 (N^2+N)/2역수와 동일하므로√(2y+1)-.5 . 9로 아래로 조정 한 후이 값을 바닥으로 설정하면 결과가 나타납니다

유일한 문제는 8 미만의 잔류 물에 대해 가상의 제곱근을 얻는다는 것입니다. 그래서 우리는 프로그램 출력을 0으로 만드는 실제 부분을 취합니다.


0

펄 5, 51 바이트

-E대신 50 바이트 + 1 -e:

@_=(0)x 9;push@_,($_)x$_ for 0..13;say$_[time%100]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.