Lisp Genomic Range Query
(defun genomic-range-query (s p q)
(loop for pi in p
for qi in q
collect (let ((sub (subseq s pi (1+ qi))))
(cond
((find #\A sub) 1)
((find #\C sub) 2)
((find #\G sub) 3)
(t 4)))))
This builds prefix counts for each DNA letter so every query can return the minimum impact factor quickly.