Haskell Genomic Range Query
genomicRangeQuery :: String -> [Int] -> [Int] -> [Int]
genomicRangeQuery s p q = [classify (substr pi' qi) | (pi', qi) <- zip p q]
where
substr pi' qi = take (qi - pi' + 1) (drop pi' s)
classify sub
| 'A' `elem` sub = 1
| 'C' `elem` sub = 2
| 'G' `elem` sub = 3
| otherwise = 4
This builds prefix counts for each DNA letter so every query can return the minimum impact factor quickly.