Bash Genomic Range Query
genomic_range_query() {
    local _s=$1
    local -n _p="$2"
    local -n _q="$3"
    local -n _out="$4"
    _out=()
    local _k _idx
    for _idx in "${!_p[@]}"; do
        local _pi=${_p[$_idx]} _qi=${_q[$_idx]}
        local _len=$(( _qi - _pi + 1 ))
        local _sub=${_s:_pi:_len}
        if [[ "$_sub" == *A* ]]; then
            _out[_idx]=1
        elif [[ "$_sub" == *C* ]]; then
            _out[_idx]=2
        elif [[ "$_sub" == *G* ]]; then
            _out[_idx]=3
        else
            _out[_idx]=4
        fi
    done
}

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