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