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
小切手
約53%の時間でf[.53]実際に値が生成されるかどうかを見てみましょう1。各テストは、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
左から右へ、一度に1桁ずつ進みます。
RandomInteger []が1を返す場合、answer = 1
それ以外の場合、2番目のRandomInteger []が0を返す場合、answer = 0、
その他3番目のRandomInteger []が0を返す場合、答えは0です。
そうしないと....
すべての数字がテストされたときに、まだ回答がない場合、answer = RandomInteger []。