fork download
  1. main = do
  2. inp <- getLine
  3. let [k, m, n] = (map read . words $ inp) :: [Int]
  4. print $ traitProb k m n
  5.  
  6. data Genotype = Dominant | Recessive | Heterozygous
  7.  
  8. cartProd :: [a] -> [a] -> [(a, a)]
  9. cartProd xs ys = [ (x, y) | x <- xs, y <- ys ]
  10.  
  11.  
  12. traitProb :: Int -> Int -> Int -> Double
  13. traitProb k m n = getProb list
  14. where list = cartProd genotypes genotypes
  15. genotypes = (replicate k Dominant) ++ (replicate m Heterozygous) ++ (replicate n Recessive)
  16. getProb = sum . map ((flip (/)) total . getMultiplier)
  17. total = fromIntegral $ length list
  18. getMultiplier (Dominant, Dominant) = 1.0
  19. getMultiplier (Recessive, Dominant) = 1.0
  20. getMultiplier (Dominant, Recessive) = 1.0
  21. getMultiplier (Dominant, Heterozygous) = 1.0
  22. getMultiplier (Heterozygous, Dominant) = 1.0
  23. getMultiplier (Heterozygous, Heterozygous) = 0.75
  24. getMultiplier (Heterozygous, Recessive) = 0.5
  25. getMultiplier (Recessive, Heterozygous) = 0.5
  26. getMultiplier (Recessive, Recessive) = 0.0
Success #stdin #stdout 0s 6380KB
stdin
3 3 3
stdout
0.7500000000000011