## The challenge

Write a function that accepts two square matrices (`N x N` two dimensional arrays), and return the sum of the two. Both matrices being passed into the function will be of size `N x N` (square), containing only integers.

How to sum two matrices:

Take each cell `[n][m]` from the first matrix, and add it with the same `[n][m]` cell from the second matrix. This will be cell `[n][m]` of the solution matrix.

Visualization:

```|1 2 3|     |2 2 1|     |1+2 2+2 3+1|     |3 4 4|
|3 2 1|  +  |3 2 3|  =  |3+3 2+2 1+3|  =  |6 4 4|
|1 1 1|     |1 1 3|     |1+1 1+1 1+3|     |2 2 4|
```

### Example

```matrixAddition(
[ [1, 2, 3],
[3, 2, 1],
[1, 1, 1] ],
//      +
[ [2, 2, 1],
[3, 2, 3],
[1, 1, 3] ] )

// returns:
[ [3, 4, 4],
[6, 4, 4],
[2, 2, 4] ]
```

## The solution in Java code

Option 1:

```public class Solution {
public static int[][] matrixAddition(int[][] a, int[][] b) {
int matLen = a.length;
int[][] resultMatrix = new int[matLen][matLen];
for(int i = 0; i < matLen; i++) {
for(int j = 0; j < matLen; j++) {
resultMatrix[i][j] = a[i][j] + b[i][j];
}
}
return resultMatrix;
}
}
```

Option 2:

```import java.util.stream.IntStream;
public class Solution {
public static int[][] matrixAddition(int[][] a, int[][] b) {
IntStream.range(0, a.length * a.length)
.forEach(n -> a[n / a.length][n % a.length] += b[n / a.length][n % a.length]);
return a;
}
}
```

Option 3:

```public class Solution {
public static int[][] matrixAddition(int[][] a, int[][] b) {
for(int row=0;row<a.length;row++)
for(int col=0;col<a[0].length;col++)
a[row][col]+=b[row][col];

return a;
}
}
```

## Test cases to validate our solution

```import org.junit.Test;
import static org.junit.Assert.assertArrayEquals;

@Test
public void sampleTest() {
int[][] expected = new int[][] { { 3, 4, 4 }, { 6, 4, 4 }, { 2, 2, 4 } };

assertArrayEquals(expected,
new int[][] { { 1, 2, 3 }, { 3, 2, 1 }, { 1, 1, 1 } },
new int[][] { { 2, 2, 1 }, { 3, 2, 3 }, { 1, 1, 3 } }));

expected = new int[][] { { 3 } };
assertArrayEquals(expected,
new int[][] { { 1 } },
new int[][] { { 2 } }));

expected = new int[][] { { 3, 5 }, { 3, 5 } };
assertArrayEquals(expected,