かなり速いホワイトウォーター川をカヌーでaいでいます。突然、パドルが爆発し、パドルなしで川を急流で急降下する危険な状況に陥ります。幸運なことに、あなたにはまだプログラミングスキルがあるので、急流を乗り切るのを助けるために、カヌーの横にプログラムを彫ることにします。ただし、プログラムを作成するカヌーの側面には表面積があまりないため、プログラムをできるだけ短くする必要があります。
川は8 x 16グリッドとして表すことができます。列にの番号0
を付け7
、行にの番号0
を付け15
ます。
y
--------15
--------14
--------13
--------12
--------11
--------10
--------9
--------8
--------7
--------6
--------5
--------4
--------3
--------2
--------1
--------0
01234567
x
上:障害物のない完全に穏やかな普通の川。当然、これはあなたがいる川ではありません。
座標(4、0)から開始し、そこから(0,1)
岩(o
これらの例ではで表される)に当たるまで、制御不能に川(ベクター)を上昇します。岩にぶつかると、55%の確率で岩を左に移動し(ベクトル(-1,1)
)、45%の確率で岩を右に移動します(つまりベクトル(1,1)
)。カヌーが左端または右端の列にある場合、常に中央に向かって移動します。岩がない場合は、まっすぐ上に移動します。
y
----x---15
----xo--14
-o--x---13
----x---12
---ox---11
---x----10
---xo---9
---ox---8
----xo--7
-----x--6
----ox--5
-o--x---4
----x---3
----xo--2
----x---1
----x---0
01234567
上:キャラクターを使用して表された、カヌーが通る可能性のあるルート x
川の地図を指定して、特定の列でカヌーが終了する確率を出力するプログラムを作成します。
プログラムに都合のよい方法(STDIN、コマンドライン引数、raw_input()
ファイルからの読み取りなど)で入力を受け入れます。入力の最初の部分は、プログラムが確率を見つける列を表す0〜7の単一の整数です。その後x,y
に、石の位置を表す形式のタプルのリストがあります。
例:
入力:
4 4,1 5,5 3,5
これは、位置(4,1)、(5,5)、および(3,5)に岩がある川を示し、4列目でカヌーが終了する確率を求めます。
出力:
0.495
この例では、岩の位置が対称であり、問題を二項分布で解決できることに注意してください。これは常に当てはまるわけではありません!
また、川は常に交差可能です。つまり、水平方向に互いに隣接する2つの岩はありません。不可能なケースの例については、グレンのコメントを参照してください。
これはコードゴルフなので、キャラクターの数が最も少なくなります。仕様が明確でない場合は、コメントで質問してください。