Another Rosalind problem, where an easy formula is hidden under a huge background.
Let’s try to understand the problem by illustrating the example case
Example case: 2 2 2 produces 0.78333
Here,
k = number of homozygous dominant = number of YY = 2
m = number of heterozygous = number of Yy = 2
n = number of homozygous recessive = number of yy = 2
So, there are 2 + 2 + 2 = 6 organisms. Since they can all mate each other, it gives us 15 pairs (6 * (6–1) /2 = 15). We have to fiund out:
(number of productions where dominant allele “Y” is present) / (total number of productions)
You could actually generate all possible pairs, collect and their production, and calculate the result.
Mate
The key here to generate productions for all cases. There are 6 possible cases:
1. Homozygous dominant-Homozygous dominant(YY — YY)
Produces all homozygous dominant
2. Homozygous Recessive-Homozygous Recessive (yy-yy)
Produces all homozygous recessive
3. Heterozygous-Heterozygous (Yy-Yy)
Produces 2 heterozygous, 1 homozygous dominant, and 1 homozygous recessive
4. Homozygous Dominant-Heterozygous (YY-Yy)
Produces 2 heterozygous, 2 homozygous dominant
5. Homozygous Recessive-Heterozygous (yy-Yy)
Produces 2 heterozygous, 2 homozygous receissive
5. Homozygous Dominant-Homozygous Recessive(YY-yy)
Produces 4 heterozygous
Since each pair gives you 4 possible productions, for 15 possible pairs, there are total 15 X 4 = 60 possible productions. You can count and find out that among them, dominant allele (Y) is present in 47 cases, and 47/60 = 0.78333, which is the result.
Code
However, I found other people solved this with even much shorter code. One guy even solved it with a one-line formula. You might want to check them too.
Any questions — please leave a comment. Glad to help!