GenomicRangeQuery 100% Solution in Javascript

Question

app.codility.com

My Solution

app.codility.com

function solution(S, P, Q) {
    
    let prefixASum = [];
    let prefixCSum = [];
    let prefixGSum = [];
    let prefixTSum = [];
    let ASum = 0;
    let CSum = 0;
    let GSum = 0;
    let TSum = 0;
    
    let ans = [];
    
    for (let i = 0; i <= S.length; i++) {
        
        if (i > 0) { // prefix[0] = 0
            switch (S[i-1]) { // prefix[1] = a0
                case 'A':
                    ASum++;
                    break;
                case 'C':
                    CSum++;
                    break;
                case 'G':
                    GSum++;
                    break;
                case 'T':
                    TSum++;
                    break;
            }
        }
        
        prefixASum[i] = ASum; 
        prefixCSum[i] = CSum;
        prefixGSum[i] = GSum;
        prefixTSum[i] = TSum;
        
    }
    
    for (let i = 0; i < P.length; i++) {
        if (prefixASum[Q[i]+1] - prefixASum[P[i]] > 0) {
            ans[i] = 1;
        } else if (prefixCSum[Q[i]+1] - prefixCSum[P[i]] > 0) {
            ans[i] = 2;
        } else if (prefixGSum[Q[i]+1] - prefixGSum[P[i]] > 0) {
            ans[i] = 3;
        } else {
            ans[i] = 4;
        }
    }
    
    return ans;

}

Note

https://codility.com/media/train/3-PrefixSums.pdf

f:id:fervor:20190319143959p:plain