您正在划一条独木舟在一条相当快的激流河上。突然,您的船桨爆炸了,您发现自己处在危险的境地,没有任何船桨,使河流急速驶下。幸运的是,您仍然具有编程技能,因此您决定在独木舟旁边雕刻一个程序,以帮助您在急流中生存。但是,独木舟侧面没有太多的表面可用来编写程序,因此您必须使程序尽可能短。
河流可以表示为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%的机会越过岩石的左侧(即vector (-1,1)
),而有45%的机会就越过岩石的右侧(即vector (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)处有岩石的河流,并询问独木舟在第四列结束的可能性。
输出:
0.495
请注意,在此示例中,岩石的位置是对称的,从而可以通过二项式分布来解决问题。并非总是如此!
另外,河流将永远是可穿越的。也就是说,永远不会有两个水平相邻的岩石。见格伦的评论不可能案例的示例,。
这是代码高尔夫,因此最少的字符获胜。如果规范不明确,请随时在评论中提问。