このタスクは、確率を正確かつ迅速に計算するコードを記述することです。出力は、最も縮小された形式で分数として記述された正確な確率でなければなりません。つまり、出力んです4/8
けど、むしろ1/2
。
いくつかの正の整数についてn
、1と-1の長さの一様にランダムな文字列を考え、n
それをAと呼びます。次にA
、最初の値に連結します。これはA[1] = A[n+1]
、1からのインデックスA
が長さを持っている場合 n+1
です。ここでn
、最初のn
値が-1、0、または1であり、確率がそれぞれ1 / 4、1 / 2、1 / 4 である長さの2番目のランダムな文字列についても検討し、Bと呼びます。
今の内積考えるA[1,...,n]
とB
との内積をA[2,...,n+1]
してB
。
たとえば、を検討してくださいn=3
。以下のための可能な値A
とは、B
可能性A = [-1,1,1,-1]
とB=[0,1,-1]
。この場合、2つの内積は0
および2
です。
コードは、両方の内積がゼロである確率を出力する必要があります。
MartinBüttnerが作成したテーブルをコピーすると、次のサンプル結果が得られます。
n P(n)
1 1/2
2 3/8
3 7/32
4 89/512
5 269/2048
6 903/8192
7 3035/32768
8 169801/2097152
言語とライブラリ
自由に利用できる言語とライブラリを使用できます。私はあなたのコードを実行できなければならないので、可能であればLinuxでコードを実行/コンパイルする方法の完全な説明を含めてください。
タスク
コードは、先頭がn=1
nで、別の行にnが増えるたびに正しい出力を与える必要があります。10秒後に停止します。
スコア
スコアはn
、コンピューターで実行したときにコードが10秒後に停止する前に到達した最高点です。同点の場合、勝者が最も早く最高スコアに到達する人になります。
エントリの表
n = 64
Python。Mitch Schwartzによるバージョン1n = 106
Python。2015年6月11日バージョン:Mitch Schwartzn = 151
でC ++。ミッチ・シュワルツ港の回答by kirbyfan64sosn = 165
Python。バージョン2015年6月11日、ミッチシュワルツによる「剪定」バージョンN_MAX = 165
。n = 945
正確な数式を使用してMin_25 でPythonで。すごい!n = 1228
(Min_25の以前の回答に基づく)別の正確な式を使用したMitch Schwartz によるPythonで。n = 2761
同じ正確な数式のより高速な実装を使用したMitch Schwartz によるPythonで。n = 3250
でPythonの使用Pypyを同じ実装を使用ミッチ・シュワルツによって。このスコアはpypy MitchSchwartz-faster.py |tail
、コンソールのスクロールのオーバーヘッドを回避する必要があります。