Mathematica 165
没有精简,但是有些人可能会发现感兴趣的算法:
d = RealDigits; r = RandomInteger;
f@n_ := If[(c = Cases[Transpose@{a = Join[ConstantArray[0, Abs[d[n, 2][[2]]]], d[n, 2][[1]]],
RandomInteger[1, {Length@a}]}, {x_, x_}]) == {}, r, c[[1, 1]]]
用法
f[.53]
1个
校验
让我们看看是否f[.53]
真的在1
大约53%的时间内产生了该值。每次测试都会计算10 ^ 4样本的%。
运行50次这样的测试并取平均值。
Table[Count[Table[f[.53], {10^4}], 1]/10^4 // N, {50}]
Mean[%]
{0.5292、0.5256、0.5307、0.5266、0.5245、0.5212、0.5316、0.5345、0.5297、0.5334、0.5306、0.5288、0.528、0.5379、0.5293、0.5263、0.539、0.5322、0.5195、0.5208、0.5382、0.543、0.5336、0.5305、0.5303 ,0.5297、0.5318、0.5243、0.5281、0.5361、0.5349、0.5308、0.5265、0.5309、0.5233、0.5345、0.5316、0.5376、0.5264、0.5269、0.5295、0.523、0.5294、0.5326、0.5316、0.5334、0.5165、0.5296、0.5266、0.5293 }
0.529798
结果直方图

说明(扰流板警报!)
.53的基数2表示为
.10000111101011100001010001111010111000010100011110110
从左至右,一次一位:
如果RandomInteger []返回1,则答案= 1,
否则,如果第二个RandomInteger []返回0,则答案= 0,
否则,如果第三个RandomInteger []返回0,则答案= 0,
其他....
如果在测试完所有数字后仍然没有答案,则答案= RandomInteger []。