Skip to content

Commit 235043c

Browse files
committed
✨ add challenge-24 solution
1 parent 48ce285 commit 235043c

File tree

3 files changed

+122
-0
lines changed

3 files changed

+122
-0
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# Reto 24: Brincos en la escalera
2+
3+
## Problema
4+
5+
En la aldea de Santa, hay una escalera mágica que lleva a la fábrica de juguetes 🧸. Los elfos, siempre buscando hacer ejercicio y divertirse 🏃‍♂️, deciden saltar los peldaños de la escalera.
6+
7+
Nos dan steps como el número de peldaños de la escalera y el número máximo de peldaños maxJump que un elfo puede saltar en un solo salto.
8+
9+
Tu tarea es ayudar a los elfos a encontrar **todas las posibles secuencias de saltos que pueden hacer para subir la escalera, ordenadas de menos a más.** Teniendo en cuenta que los elfos pueden saltar como máximo maxJump peldaños en un solo salto (pero pueden saltar menos peldaños si así lo desean).
10+
11+
Por ejemplo, si hay una escalera de steps = 4 y maxJump = 2 es el número máximo de peldaños que un elfo puede saltar en un solo salto, entonces hay cinco secuencias de saltos posibles:
12+
13+
- [1, 1, 1, 1] (salta 1 peldaño 4 veces)
14+
- [1, 1, 2] (salta 1 peldaño 2 veces y luego 2 peldaños)
15+
- [1, 2, 1] (salta 1 peldaño, luego 2 peldaños y luego 1 peldaño)
16+
- [2, 1, 1] (salta 2 peldaños, luego 1 peldaño y luego 1 peldaño)
17+
- [2, 2] (salta 2 peldaños 2 veces)
18+
19+
Más ejemplos:
20+
21+
```js
22+
getStaircasePaths(2, 1) // [[1, 1]]
23+
getStaircasePaths(3, 3) // [[1, 1, 1], [1, 2], [2, 1], [3]]
24+
getStaircasePaths(5, 1) // [[1, 1, 1, 1, 1]]
25+
getStaircasePaths(5, 2)
26+
/*
27+
[
28+
[1, 1, 1, 1, 1],
29+
[1, 1, 1, 2],
30+
[1, 1, 2, 1],
31+
[1, 2, 1, 1],
32+
[1, 2, 2],
33+
[2, 1, 1, 1],
34+
[2, 1, 2],
35+
[2, 2, 1],
36+
]
37+
*/
38+
```
39+
40+
## Mi solución
41+
42+
```js
43+
function getStaircasePaths(steps, maxJump) {
44+
const result = [];
45+
46+
function generatePaths(currentPath, remainingSteps) {
47+
if (remainingSteps === 0) {
48+
result.push([...currentPath]);
49+
return;
50+
}
51+
52+
for (let jump = 1; jump <= maxJump && jump <= remainingSteps; jump++) {
53+
currentPath.push(jump);
54+
generatePaths(currentPath, remainingSteps - jump);
55+
currentPath.pop();
56+
}
57+
}
58+
59+
generatePaths([], steps);
60+
return result;
61+
}
62+
```
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
function getStaircasePaths(steps, maxJump) {
2+
const result = [];
3+
4+
function generatePaths(currentPath, remainingSteps) {
5+
if (remainingSteps === 0) {
6+
result.push([...currentPath]);
7+
return;
8+
}
9+
10+
for (let jump = 1; jump <= maxJump && jump <= remainingSteps; jump++) {
11+
currentPath.push(jump);
12+
generatePaths(currentPath, remainingSteps - jump);
13+
currentPath.pop();
14+
}
15+
}
16+
17+
generatePaths([], steps);
18+
return result;
19+
}
20+
21+
module.exports = getStaircasePaths;
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
const getStaircasePaths = require('./index');
2+
3+
describe('24 => Brincos en la escalera', () => {
4+
const testCases = [
5+
{
6+
input: [2, 1],
7+
output: [[1, 1]],
8+
},
9+
{
10+
input: [3, 3],
11+
output: [[1, 1, 1], [1, 2], [2, 1], [3]],
12+
},
13+
{
14+
input: [5, 1],
15+
output: [[1, 1, 1, 1, 1]],
16+
},
17+
{
18+
input: [5, 2],
19+
output: [
20+
[1, 1, 1, 1, 1],
21+
[1, 1, 1, 2],
22+
[1, 1, 2, 1],
23+
[1, 2, 1, 1],
24+
[1, 2, 2],
25+
[2, 1, 1, 1],
26+
[2, 1, 2],
27+
[2, 2, 1],
28+
],
29+
},
30+
];
31+
32+
it('should return an array type', () => {
33+
expect(Array.isArray(getStaircasePaths(...testCases[0].input))).toBe(true);
34+
});
35+
36+
it.each(testCases)('should return the correct output', ({ input, output }) => {
37+
expect(getStaircasePaths(...input)).toStrictEqual(output);
38+
});
39+
});

0 commit comments

Comments
 (0)