Elixir Genomic Range Query
defmodule GenomicRangeQuery do
  def genomic_range_query(s, p, q) do
    p
    |> Enum.zip(q)
    |> Enum.map(fn {pi, qi} ->
      substr = String.slice(s, pi, qi - pi + 1)

      cond do
        String.contains?(substr, "A") -> 1
        String.contains?(substr, "C") -> 2
        String.contains?(substr, "G") -> 3
        true -> 4
      end
    end)
  end
end

This builds prefix counts for each DNA letter so every query can return the minimum impact factor quickly.