Erlang Genomic Range Query
-module(genomic_range_query).
-export([genomic_range_query/3]).
genomic_range_query(S, P, Q) ->
[classify(string:slice(S, Pi, Qi - Pi + 1)) || {Pi, Qi} <- lists:zip(P, Q)].
classify(Sub) ->
case lists:member($A, Sub) of
true -> 1;
false ->
case lists:member($C, Sub) of
true -> 2;
false ->
case lists:member($G, Sub) of
true -> 3;
false -> 4
end
end
end.
This builds prefix counts for each DNA letter so every query can return the minimum impact factor quickly.