すべての0 <i <14について、i番目の数がi%の確率で発生する乱数ジェネレーターを設計します。0は正確に9%の確率で発生します。ジェネレーターのシードはシステム時間である必要があります。事前定義された関数を乱数生成に使用することはできません。
基本的に、1は1%の確率で発生し、2は2%の確率で発生し、13までは13%の確率で発生します。これはコードゴルフなので、最短のコードが優先されます。
<
from不等式と>
from引用ブロックがHTMLタグを形成していました。
すべての0 <i <14について、i番目の数がi%の確率で発生する乱数ジェネレーターを設計します。0は正確に9%の確率で発生します。ジェネレーターのシードはシステム時間である必要があります。事前定義された関数を乱数生成に使用することはできません。
基本的に、1は1%の確率で発生し、2は2%の確率で発生し、13までは13%の確率で発生します。これはコードゴルフなので、最短のコードが優先されます。
<
from不等式と>
from引用ブロックがHTMLタグを形成していました。
回答:
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×⊃⌽⎕TS)↓(/⍨⍳13)
⍳13
整数1から13
(/⍨
… )
それ自体で複製します。たとえば、/⍨3
is 3 3 3
および/⍨2 3
is 2 2 3 3 3
n↓
… n要素を削除します(n >リストの長さの場合は空のリストを残します)
⎕TS
システムタイムスタンプ。例:2015 11 1 13 28 56 834
⊃⌽
最後の要素、つまり現在のミリ秒0–999
⌊.1×
乗算0.1で
⊃
最初の要素を切り捨て、データが空の場合は0を返します
<?for($t=microtime()*100;0<=$t-=++$i;)?><?=$i%14;
microtime
「0.04993000 1446409253」のような文字列として時間を返します。これに100を掛けると、PHPは文字列を強制的に0.04993000に変換し、結果は4.993000になります。したがって$t
、「ランダムな」数で初期化されます[0,100)
$t
0になるまで1、2、3、...を減算します;echo
で?><?=
、実際にの代わりに書き込むことができます。しかし、うまくいきました!
これはばかげた。
{:({:1e3*6!:0'')$100{.#~i.14
6!:0''
Y M D h m s
ミリ秒は秒の端数として表される6項目リストとしての現在の時刻です。それらを取得するには、秒({:
)を掛ける以外に選択肢はありません1e3
。一方、#~i.14
0は0、1は1、2は2、以下同様に13の13までのリストであり、100アイテムまでで埋めます100{.
。
Jには循環インデックスがないので、大きなリストにインデックスを付ける前に100を法とするミリ秒をかけたくなるかもしれません。ただし、$
代わりにを使用して100アイテムのリストを周期的に拡張し、取得したミリ秒(0から60999まで)に2文字を保存して、最後のエントリを取得できます。
60000の要素リストは、使用されているメモリの総量などではなく、単にやり過ぎのように感じます:P
これは、シードできないjavascriptの標準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>