from fractions import Fraction
def foo(n):
a, b = Fraction(1), Fraction(0)
for i in range(n * 2, 0, -2):
a, b = (a * i + b) / (i + 1), (a + b * i) / (i + 1),
return b
print(foo(1))
print(foo(100))
Мое решение, рАвно как и ответ, претендуют на правильность, да-да-да ) бросаем по два раза и ждем появления чего-то первого.
Очевидно, что перебрасывать имеет смысл кубик, на котором выпало 1-3.
from random import randint
def coin():
""" реализация случайной бернуллиевской величины с p = q = 0.5 """
return randint(0, 1)
def bernoulli(p):
r = 0.
for _ in range(53): # магическое число обусловлено разрядностью типа float
# https://ru.wikipedia.org/wiki/Число_двойной_точности
if coin(): # тут должен быть быть источник случайной величины из условия,
# например итератор по списку случайных нулей и единиц
r += 1.
r *= .5
return int(r < p)
n, p = 10 ** 5, 1 / 3
print(sum(bernoulli(p) for _ in range(n)) / n)
discount, p = [1., 1.], 1. - 29. / 61.
for dist in range(1, 7):
discount.append(discount[-1] * p)
discount += discount[-2:-8:-1]
res, cnt = 0., 0
for king in range(64):
for rook1 in range(64):
for rook2 in range(64):
if king == rook1 or king == rook2 or rook1 == rook2:
continue
cnt += 1
kingx, kingy = divmod(king, 8)
rook1x, rook1y = divmod(rook1, 8)
rook2x, rook2y = divmod(rook2, 8)
attac1hor = 1. if kingy == rook1y else 0.
attac1ver = 1. if kingx == rook1x else 0.
attac2hor = 1. if kingy == rook2y else 0.
attac2ver = 1. if kingx == rook2x else 0.
if kingx == rook1x == rook2x:
if kingy < rook1y < rook2y or kingy > rook1y > rook2y:
attac2ver = 0.
elif kingy < rook2y < rook1y or kingy > rook2y > rook1y:
attac1ver = 0.
elif kingy == rook1y == rook2y:
if kingx < rook1x < rook2x or kingx > rook1x > rook2x:
attac2hor = 0.
elif kingx < rook2x < rook1x or kingx > rook2x > rook1x:
attac1hor = 0.
attac1 = attac1hor * discount[kingx - rook1x] + attac1ver * discount[kingy - rook1y]
attac2 = attac2hor * discount[kingx - rook2x] + attac2ver * discount[kingy - rook2y]
res += attac1 + attac2 - attac1 * attac2
print(res / cnt * 2.)
0.3756044599826443
ABC A⊕B A&&!B||C
--------------------
000 0 1 пофиг
001 0 1 пофиг
010 1 0 жопа q(1-p)(1-r)
011 1 1 ок
100 1 1 ок
101 1 1 ок
110 0 0 пофиг
111 0 1 пофиг