Predict the output of the following code without running it. The same code is written in C, C++, Python, and Java. The working codes are stored here.
Answer: [4 3 2 1 8 7 6 5 12 11 10 9]
C
int** performOps(int **A, int m, int n, int *len1, int *len2) { int i, j; *len1 = m; *len2 = n; int **B = (int **)malloc((*len1) * sizeof(int *)); for (i = 0; i < *len1; i++) B[i] = (int *)malloc((*len2) * sizeof(int)); for (i = 0; i < m; i++) for (j = 0; j < n; j++) B[i][n - 1 - j] = A[i][j]; return B; } int main() { const int m = 3, n = 4; /********** Generate A **********/ int **A = (int**)malloc(sizeof(int*)*m); for (int i = 0; i < m; ++i) A[i] = (int*)malloc(sizeof(int) *n); for (int idx = 0; idx < m; ++idx) for (int jdx = 0; jdx < n; ++jdx) A[idx][jdx] = idx * n + jdx+1; /********** End of Gen **********/ // A = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; int len1, len2; int **B = performOps(A, m, n, &len1, &len2); int i, j; for (i = 0; i < len1; i++) for (j = 0; j < len2; j++) printf("%d ", B[i][j]); }
C++
vector<vector<int> > performOps(vector<vector<int> > &A) { vector<vector<int> > B; B.resize(A.size()); for (int i = 0; i < A.size(); i++) { B[i].resize(A[i].size()); for (int j = 0; j < A[i].size(); j++) { B[i][A[i].size() - 1 - j] = A[i][j]; } } return B; } int main() { vector<vector<int> > A = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; vector<vector<int> > B = performOps(A); for (int i = 0; i < B.size(); i++) for (int j = 0; j < B[i].size(); j++) cout << B[i][j] << " "; }
Java
ArrayList<ArrayList<Integer>> performOps(ArrayList<ArrayList<Integer>> A) { ArrayList<ArrayList<Integer>> B = new ArrayList<ArrayList<Integer>>(); for (int i = 0; i < A.size(); i++) { B.add(new ArrayList<Integer>()); for (int j = 0; j < A.get(i).size(); j++) { B.get(i).add(0); } for (int j = 0; j < A.get(i).size(); j++) { B.get(i).set(A.get(i).size() - 1 - j, A.get(i).get(j)); } } return B; } void main(String[] args) { /********** Generate A **********/ ArrayList<ArrayList<Integer>> A = new ArrayList<>(Arrays.asList( new ArrayList<>(Arrays.asList(1, 2, 3, 4)), new ArrayList<>(Arrays.asList(5, 6, 7, 8)), new ArrayList<>(Arrays.asList(9, 10, 11, 12)))); /********** End of Gen **********/ // A = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; ArrayList<ArrayList<Integer>> B = performOps(A); for (int i = 0; i < B.size(); i++) for (int j = 0; j < B.get(i).size(); j++) System.out.print(B.get(i).get(j) + " "); }
Python
def performOps(A): m = len(A) n = len(A[0]) B = [] for i in xrange(len(A)): B.append([0] * n) for j in xrange(len(A[i])): B[i][n - 1 - j] = A[i][j] return B if __name__ == '__main__': A = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] B = performOps(A) for i in xrange(len(B)): for j in xrange(len(B[i])): print B[i][j],
Edit: Fixed Python bug