Primer – Predict Array 2

Predict the output of the following codes. There are different versions of the code (C/C++/Java/Python). The codes are also saved here. Answer: [5 10 2 1 5 1 2 10]


C

int* performOps(int *A, int len, int *blen) {
    int i;
    *blen = len * 2;
    int *B = (int *)malloc((*blen) * sizeof(int));
    for (i = 0; i < len; i++) {
        B[i] = A[i];
        B[i + len] = A[(len - i) % len];
    }
    return B;
}

int main() {
    const int len = 4;
    /********** Generate A **********/
    int A[] = {5, 10, 2, 1};
    /********** End of Gen **********/
    // A = {5, 10, 2, 1};
    int blen;
    int *B = performOps(A, len, &blen);
    int i;
    for (i = 0; i < blen; i++)
        printf("%d ", B[i]);    
}

C++

vector<int> performOps(vector<int> A) {
    vector<int> B(2 * A.size(), 0);
    for (int i = 0; i < A.size(); i++) {
        B[i] = A[i];
        B[i + A.size()] = A[(A.size() - i) % A.size()];
    }
    return B;
}
int main() {
    vector<int> A = {5,10,2,1};
    vector<int> B = performOps(A);
    for (int i = 0; i < B.size(); i++)
        cout<<B[i]<<" ";
}

Java

public class predict_array {
    public static ArrayList<Integer> performOps(ArrayList<Integer> A) {
        ArrayList<Integer> B = new ArrayList<Integer>();
        for (int i = 0; i < 2 * A.size(); i++) B.add(0);
        for (int i = 0; i < A.size(); i++) {
            B.set(i, A.get(i));
            B.set(i + A.size(), A.get((A.size() - i) % A.size()));
        }
        return B;
    }
    
    public static void main(String[] args) {
        /********** Generate A **********/
        ArrayList<Integer> A =
            new ArrayList<>(Arrays.asList(5,10,2,1));
        /********** End of Gen **********/
        // A = {5,10,2,1}
        ArrayList<Integer> B = performOps(A);
        for (int i = 0; i < B.size(); i++)
            System.out.print(B.get(i) + " ");
    }
};

Python

def performOps(A):
    blen = 2 * len(A)
    B = [0]*blen
    for i in xrange(len(A)):
        B[i] = A[i]
        B[i + len(A)] = A[(len(A) - i) % len(A)]
    return B

if __name__ == '__main__':
    A = [5, 10, 2, 1]
    B = performOps(A)
    for i in xrange(len(B)):
        print B[i],