タイトルが示すように、この問題は@NPのPolite Near-Sighted Drunk Botに半インスパイアされています
貧弱なボットは原点のデカルトグリッド上に配置され、1分ごとに4方向(上、下、左、右)のいずれかに1ユニット移動します。
n分後、グリッド上のすべての潜在的な地雷がアクティブになり、それらの上に自分自身を見つける可能性のある貧しいボットを殺します。鉱山は、式| y | = | x |を満たすすべての整数座標に配置されます。
チャレンジ
あなたは提供されますn個の入力として、地雷の爆発の前に、分の数を、出力として、あなたはボットである確率見つけなければならない死者を。
入力:nを表す自然数。
出力:ボットが死んでいる確率をp / qとします。ここで、pとqは比較的素数の整数です(qは0にはできませんが、pはできます)。出力p。
ルール
- アルゴリズムを指数関数的またはそれ以上の時間で実行してはなりません。理想的には、多項式時間以下で実行する必要があります。
- アルゴリズム
n
は、妥当な時間内に20未満の入力を処理できる必要があります(難しすぎる場合は調整可能)。 - これはコードゴルフの挑戦です。
- 与えられたnのすべての可能性を反復することは、答えとして受け入れられることはほとんどありません。
テストケース
1
->0
2
->3
4
->39
6
->135
8
->7735
10
->28287
n = 6の計算例
U、D、R、およびLの4つの可能な移動があります。使用できるパスの合計数は4 ^ 6または4096です。線y = xに沿って着陸する4つの可能なケースがあります:x、y = ±1; x、y =±2; x、y =±3; またはx = y =0。最終的に(1,1)、(2,2)、および(3,3)になる方法の数をカウントし、それらに4を掛けて他の象限を考慮し、追加します。これは、最終的に(0,0)になる方法の数です。
ケース1:ボットは(3、3)で終了します。ボットがここで終了するためには、3回の正しい移動と3回の移動が必要です。言い換えると、ここに到達する方法の総数は、RRRUUUシーケンス内の文字を再配置する方法であり、6 = 3 = 20を選択します。
ケース2:ボットは(2,2)で終了します。ボットがここに到達するためには、上に2回、右に3回、左に1回移動する必要がありました。または、右に2回、上に3回、下に1回移動します。したがって、ここに到達する方法の総数は、シーケンスRRRLUUおよびUUUDRRの文字を再配置する方法の合計であり、両方とも(6から1を選択)*(5から2を選択)= 60、合計120の可能性。
ケース3:ボットは(1,1)で終了します。ボットがここに到達するためには、右に1回、上に3回、下に2回の移動が必要でした。この場合、RUUUDDシーケンス内の文字を再配置する方法の数は、(6から1を選択)*(5から2を選択)= 60です。
上に1回、右に3回、左に2回移動します。この場合、シーケンスURRRLLの文字を再配置する方法の数は、(6から1を選択)*(5から2を選択)= 60です。
右に2回、左に1回、上に2回、下に1回移動します。この場合、シーケンスUUDRRLの文字を再配置する方法の数は、(6から1を選択)*(5から1を選択)*(4から2を選択)= 180です。
したがって、最終的に(1,1)になるウェイの総数は300です。
ケース4:ボットは(0,0)で終了します。ボットがここに到達するためには、次のことが必要でした。
右に3回、左に3回移動します。この場合、RRRLLLシーケンスの文字を再配置する方法の数は(6を選択3)= 20です。
上に3回、下に3回移動します。この場合、UUUDDDシーケンスの文字を再配置する方法の数は(6を選択3)= 20です。
右に1回、左に1回、上に2回、下に2回移動します。この場合、シーケンスRLUUDDの文字を再配置する方法の数は、(6から1を選択)*(5から1を選択)*(4から2を選択)= 180です。
上に1回、下に1回、右に2回、左に2回移動します。この場合、シーケンスRRLLUDの文字を再配置する方法の数は、(6から1を選択)*(5から1を選択)*(4から2を選択)= 180です。
したがって、(0,0)で終わるウェイの総数は400です。
これらのケースを一緒に追加すると、最終的に| y |になる方法の総数がわかります。= | x | 4(20 + 120 + 300)+ 400 = 2160です。したがって、確率は2160/4096です。この割合が完全に減少すると、135 /256になるため、答えは135です。