DIM_2 1 makeMatrix(randRange(-2, 5, DIM_1, DIM_2)) makeMatrix(randRange(-2, 5, DIM_3, DIM_4)) matrixMult(MAT_1, MAT_2) matrixPad(SOLN_MAT, 3, 3) "\\textbf " + randFromArray("ABCDEF") "\\textbf " + randFromArray("vw") [GREEN, BLUE, GRAY] [ORANGE] makeMultHintMatrix(MAT_1, MAT_2, ROW_COLORS, COL_COLORS) $._("row") $._("column")

`PRETTY_MAT_1_ID = printSimpleMatrix(MAT_1)`

`PRETTY_MAT_2_ID = printSimpleMatrix(MAT_2)`

What is `PRETTY_MAT_1_ID + PRETTY_MAT_2_ID`?

Because `PRETTY_MAT_1_ID` has dimensions `(DIM_1 + "\\times" + DIM_2)` and `PRETTY_MAT_2_ID` has dimensions `(DIM_3 + "\\times" + DIM_4)`, the answer matrix will have dimensions `(DIM_1 + "\\times" + DIM_4)`.

`PRETTY_MAT_1_ID + PRETTY_MAT_2_ID = printColoredDimMatrix(MAT_1, ROW_COLORS, true) printColoredDimMatrix(MAT_2, COL_COLORS, false) = printSimpleMatrix(maskMatrix(FINAL_HINT_MAT, []))`

To find the element at any row `i`, column `j` of the answer matrix, multiply the elements in row `i` of the first matrix, `PRETTY_MAT_1_ID`, with the corresponding elements in column `j` of the second matrix, `PRETTY_MAT_2_ID`, and add the products together.

So, to find the element at row 1, column 1 of the answer matrix, multiply the first element in `colorMarkup("\\text{" + ROW + " }1", ROW_COLORS[0])` of `PRETTY_MAT_1_ID` with the first element in `colorMarkup("\\text{" + COLUMN + " }1", COL_COLORS[0])` of `PRETTY_MAT_2_ID`, then multiply the second element in `colorMarkup("\\text{" + ROW + " }1", ROW_COLORS[0])` of `PRETTY_MAT_1_ID` with the second element in `colorMarkup("\\text{" + COLUMN + " }1", COL_COLORS[0])` of `PRETTY_MAT_2_ID`, and so on. Add the products together.

`printSimpleMatrix( maskMatrix(FINAL_HINT_MAT, [[1, 1]]) )`

Likewise, to find the element at row 2, column 1 of the answer matrix, multiply the elements in `colorMarkup("\\text{" + ROW + " }2", ROW_COLORS[1])` of `PRETTY_MAT_1_ID` with the corresponding elements in `colorMarkup("\\text{" + COLUMN + " }1", COL_COLORS[0])` of `PRETTY_MAT_2_ID` and add the products together.

`printSimpleMatrix( maskMatrix(FINAL_HINT_MAT, [[1, 1], [2, 1]]) )`

Fill out the rest:

`printSimpleMatrix(FINAL_HINT_MAT)`

After simplifying, we end up with:

`printSimpleMatrix(SOLN_MAT)`
elem elem
2 2
2 3
3 2