ゴール
N
均一な長さ()のランダムな線分を生成()しl
、等間隔(t
)の平行線と交差するかどうかを確認します。
シミュレーション
何をシミュレートしますか? ブッフォンの針。サンドボックス内の砂を滑らかにし、等間隔の平行線のセットを描画します(間の距離をと呼びますt
)。長さのまっすぐな棒を取り、サンドボックスl
に数N
回落とします。線と交差した回数をとするc
。それからPi = (2 * l * n) / (t * c)
!
これをどのようにシミュレートしますか?
- 入力してください
N,t,l
N, t, l
全てが正の整数- 次の
N
時間を実行します。- 一様にランダムな整数座標を生成する
x,y
- と
1 <= x, y <= 10^6
x,y
長さの線分の中心ですl
- 一様にランダムな整数を生成する
a
- と
1 <= a <= 180
- ましょう
P
線分がx軸と交差になる点です - 次に
a
角度です(x,y), P, (inf,0)
- 一様にランダムな整数座標を生成する
- 任意の整数の
c
ラインx = i*t
を横切るラインセグメントの数を数えますi
- 戻る
(2 * l * N) / (t * c)
仕様
- 入力
- 柔軟性があり、標準的な方法(関数パラメーター、STDINなど)および標準的な形式(文字列、バイナリなど)で入力を取得します。
- 出力
- 柔軟性があり、標準的な方法(たとえば、返品、印刷)で出力を提供します。
- 空白、末尾および先頭の空白は許容されます
- 精度、正確さの少なくとも小数点以下4桁を記入してください(つまり
3.1416
)
- 得点
- 最短のコードが勝ちます!
テストケース
偶然のため、出力がこれらと一致しない場合があります。しかし、平均すると、の与えられた値に対して、これだけの精度が得られるはずですN, t, l
。
Input (N,t,l) -> Output
----------- ------
10,10,5 -> ?.????
10,100,50 -> ?.????
1000,1000,600 -> 3.????
10000,1000,700 -> 3.1???
100000,1000,700 -> 3.14??
TL; DR
これらの課題は、Piを概算するために自然と脳(およびおそらくいくつかの再利用可能なリソース)のみを必要とするアルゴリズムのシミュレーションです。ゾンビの黙示録中に本当にPiが必要な場合、これらの方法は弾薬を無駄にしません!合計9つの課題があります。
a
が均一であれば、別の方法で方向を作成することもできますか?(2Dガウスバブルを考える)
t > l
か?以下の2つのソリューションはこの仮定を行っているため、交差のチェックがかなり簡単になります。