feat(curriculum): add solution (#42130)
* fix: ensure using in test arrays from background * feat: add solution * fix: improve description * fix: grammar Co-authored-by: Nicholas Carrigan (he/him) <nhcarrigan@gmail.com> Co-authored-by: Nicholas Carrigan (he/him) <nhcarrigan@gmail.com>
This commit is contained in:
@ -8,46 +8,51 @@ dashedName: problem-81-path-sum-two-ways
|
||||
|
||||
# --description--
|
||||
|
||||
In the 5 by 5 matrix below, the minimal path sum from the top left to the bottom right, by **only moving to the right and down**, is indicated in bold red and is equal to 2427.
|
||||
In the 5 by 5 matrix below, the minimal path sum from the top left to the bottom right, by **only moving to the right and down**, is indicated in bold red and is equal to `2427`.
|
||||
|
||||
<div style='text-align: center;'>
|
||||
$\begin{pmatrix}
|
||||
$$\begin{pmatrix}
|
||||
\color{red}{131} & 673 & 234 & 103 & 18\\\\
|
||||
\color{red}{201} & \color{red}{96} & \color{red}{342} & 965 & 150\\\\
|
||||
630 & 803 & \color{red}{746} & \color{red}{422} & 111\\\\
|
||||
537 & 699 & 497 & \color{red}{121} & 956\\\\
|
||||
805 & 732 & 524 & \color{red}{37} & \color{red}{331}
|
||||
\end{pmatrix}$
|
||||
</div>
|
||||
\end{pmatrix}$$
|
||||
|
||||
Find the minimal path sum from the top left to the bottom right by only moving right and down in `matrix`, a 2D array containing an 80 by 80 matrix.
|
||||
Find the minimal path sum from the top left to the bottom right by only moving right and down in `matrix`, a 2D array representing a matrix. The maximum matrix size used in the tests will be 80 by 80.
|
||||
|
||||
# --hints--
|
||||
|
||||
`pathSumTwoWays(testMatrix)` should return a number.
|
||||
`pathSumTwoWays(testMatrix1)` should return a number.
|
||||
|
||||
```js
|
||||
assert(typeof pathSumTwoWays(testMatrix) === 'number');
|
||||
assert(typeof pathSumTwoWays(_testMatrix1) === 'number');
|
||||
```
|
||||
|
||||
`pathSumTwoWays(testMatrix)` should return 2427.
|
||||
`pathSumTwoWays(testMatrix1)` should return `2427`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(pathSumTwoWays(testMatrix), 2427);
|
||||
assert.strictEqual(pathSumTwoWays(_testMatrix1), 2427);
|
||||
```
|
||||
|
||||
`pathSumTwoWays(matrix)` should return 427337.
|
||||
`pathSumTwoWays(testMatrix2)` should return `427337`.
|
||||
|
||||
```js
|
||||
assert.strictEqual(pathSumTwoWays(matrix), 427337);
|
||||
assert.strictEqual(pathSumTwoWays(_testMatrix2), 427337);
|
||||
```
|
||||
|
||||
# --seed--
|
||||
|
||||
## --before-user-code--
|
||||
## --after-user-code--
|
||||
|
||||
```js
|
||||
const matrix = [
|
||||
const _testMatrix1 = [
|
||||
[131, 673, 234, 103, 18],
|
||||
[201, 96, 342, 965, 150],
|
||||
[630, 803, 746, 422, 111],
|
||||
[537, 699, 497, 121, 956],
|
||||
[805, 732, 524, 37, 331]
|
||||
];
|
||||
const _testMatrix2 = [
|
||||
[4445,2697,5115,718,2209,2212,654,4348,3079,6821,7668,3276,8874,4190,3785,2752,9473,7817,9137,496,7338,3434,7152,4355,4552,7917,7827,2460,2350,691,3514,5880,3145,7633,7199,3783,5066,7487,3285,1084,8985,760,872,8609,8051,1134,9536,5750,9716,9371,7619,5617,275,9721,2997,2698,1887,8825,6372,3014,2113,7122,7050,6775,5948,2758,1219,3539,348,7989,2735,9862,1263,8089,6401,9462,3168,2758,3748,5870],
|
||||
[1096,20,1318,7586,5167,2642,1443,5741,7621,7030,5526,4244,2348,4641,9827,2448,6918,5883,3737,300,7116,6531,567,5997,3971,6623,820,6148,3287,1874,7981,8424,7672,7575,6797,6717,1078,5008,4051,8795,5820,346,1851,6463,2117,6058,3407,8211,117,4822,1317,4377,4434,5925,8341,4800,1175,4173,690,8978,7470,1295,3799,8724,3509,9849,618,3320,7068,9633,2384,7175,544,6583,1908,9983,481,4187,9353,9377],
|
||||
[9607,7385,521,6084,1364,8983,7623,1585,6935,8551,2574,8267,4781,3834,2764,2084,2669,4656,9343,7709,2203,9328,8004,6192,5856,3555,2260,5118,6504,1839,9227,1259,9451,1388,7909,5733,6968,8519,9973,1663,5315,7571,3035,4325,4283,2304,6438,3815,9213,9806,9536,196,5542,6907,2475,1159,5820,9075,9470,2179,9248,1828,4592,9167,3713,4640,47,3637,309,7344,6955,346,378,9044,8635,7466,5036,9515,6385,9230],
|
||||
@ -134,14 +139,14 @@ const matrix = [
|
||||
## --seed-contents--
|
||||
|
||||
```js
|
||||
function pathSumTwoWays(arr) {
|
||||
function pathSumTwoWays(matrix) {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Only change code above this line
|
||||
|
||||
const testMatrix = [
|
||||
const testMatrix1 = [
|
||||
[131, 673, 234, 103, 18],
|
||||
[201, 96, 342, 965, 150],
|
||||
[630, 803, 746, 422, 111],
|
||||
@ -149,11 +154,36 @@ const testMatrix = [
|
||||
[805, 732, 524, 37, 331]
|
||||
];
|
||||
|
||||
pathSumTwoWays(testMatrix);
|
||||
pathSumTwoWays(testMatrix1);
|
||||
```
|
||||
|
||||
# --solutions--
|
||||
|
||||
```js
|
||||
// solution required
|
||||
function pathSumTwoWays(matrix) {
|
||||
function makeMinimalMove(row, column) {
|
||||
if (resultMatrix[row][column + 1] < resultMatrix[row + 1][column]) {
|
||||
return resultMatrix[row][column + 1];
|
||||
}
|
||||
return resultMatrix[row + 1][column];
|
||||
}
|
||||
|
||||
const size = matrix.length;
|
||||
const resultMatrix = [];
|
||||
for (let i = 0; i < size; i++) {
|
||||
resultMatrix.push([...matrix[i]])
|
||||
}
|
||||
|
||||
for (let i = size - 2; i >= 0; i--) {
|
||||
resultMatrix[size - 1][i] += resultMatrix[size - 1][i + 1];
|
||||
resultMatrix[i][size - 1] += resultMatrix[i + 1][size - 1];
|
||||
}
|
||||
|
||||
for (let row = size - 2; row >= 0; row--) {
|
||||
for (let column = size - 2; column >= 0; column--) {
|
||||
resultMatrix[row][column] += makeMinimalMove(row, column);
|
||||
}
|
||||
}
|
||||
return resultMatrix[0][0];
|
||||
}
|
||||
```
|
||||
|
Reference in New Issue
Block a user