Bioinformatics/Rosalind

Independent Alleles

Rafe 2019. 6. 8. 15:04

http://rosalind.info/problems/lia/

from itertools import combinations
from functools import reduce
from math import factorial

with open('rosalind_lia.txt') as f:
    data= list(map(lambda x: int(x), f.read().strip().split(' ')))

def combi(n, r):
    return int(factorial(n) / factorial(r) / factorial(n - r))

AaBb_prob= 0.25
total = 2 ** data[0]
# result = reduce(lambda a, b: a+b, map(lambda x: len(list(combinations(range(total), x))) * AaBb_prob ** x * (1 - AaBb_prob) ** (total - x), range(data[1], total+1)))
result = reduce(lambda a, b: a+b, map(lambda x: combi(total, x) * AaBb_prob ** x * (1 - AaBb_prob) ** (total - x), range(data[1], total+1)))
print(result)

0th generation에서 매 세대마다 2배씩 population이 증가할때 n-th generation일때 대립 쌍이 hetero인 genotype이 k개 이상일 확률을 구하는 문제이다. 별거없고 자식이 AaBb일 확률이 0.25니까 그냥 k개 이상이 나올 확률들을 다 더해주면 된다.