Go Genomic Range Query
func genomicRangeQuery(s string, p, q []int) []int {
	result := make([]int, len(p))

	for k, pi := range p {
		sub := s[pi : q[k]+1]
		switch {
		case strings.Contains(sub, "A"):
			result[k] = 1
		case strings.Contains(sub, "C"):
			result[k] = 2
		case strings.Contains(sub, "G"):
			result[k] = 3
		default:
			result[k] = 4
		}
	}

	return result
}

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