Вы катаетесь на каноэ по довольно быстрой реке Уайтуотер. Внезапно ваши весла взрываются, и вы попадаете в опасную ситуацию, быстро несущуюся по реке без каких-либо весел. К счастью, у вас все еще есть свои навыки программирования, поэтому вы решили вырезать программу на байдарке, чтобы помочь вам пережить пороги. Однако на стороне каноэ недостаточно места для написания вашей программы, поэтому вы должны сделать программу максимально короткой.
Река может быть представлена в виде сетки 8 на 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
Обратите внимание, что в этом примере положение пород было симметричным, что позволило решить проблему с биномиальным распределением. Это не всегда так!
Также река всегда будет проходимой. То есть никогда не будет двух камней, которые расположены рядом друг с другом по горизонтали. См . Комментарий Гленна для примера невозможного случая.
Это код гольф, поэтому выигрывает меньшее количество персонажей. Не стесняйтесь задавать вопросы в комментариях, если спецификация не ясна.