Skip to content

Commit 432da41

Browse files
committed
Solución Reto 3
1 parent 588a034 commit 432da41

File tree

2 files changed

+48
-1
lines changed

2 files changed

+48
-1
lines changed

retos/reto-3/README.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# Reto 3
2+
3+
En el taller de Santa, **un elfo travieso** ha estado jugando en la cadena de fabricación de regalos, añadiendo o eliminando un paso no planificado.
4+
5+
Tienes la secuencia original de pasos en la fabricación original y la secuencia modificada modified que puede incluir un paso extra o faltar un paso.
6+
7+
Tu tarea es **escribir una función que identifique y devuelva el primer paso extra que se ha añadido o eliminado en la cadena de fabricación**. Si no hay ninguna diferencia entre las secuencias, devuelve una cadena vacía.
8+
9+
```js
10+
const original = "abcd";
11+
const modified = "abcde";
12+
findNaughtyStep(original, modified); // 'e'
13+
14+
const original = "stepfor";
15+
const modified = "stepor";
16+
findNaughtyStep(original, modified); // 'f'
17+
18+
const original = "abcde";
19+
const modified = "abcde";
20+
findNaughtyStep(original, modified); // ''
21+
```
22+
23+
A tener en cuenta:
24+
25+
- Siempre habrá un paso de diferencia o ninguno.
26+
- La modificación puede ocurrir en cualquier lugar de la cadena.
27+
- La secuencia original puede estar vacía
28+
29+
# Solución
30+
31+
Debemos revisar la `cadena más larga`, posición por posición hasta encontrar la posición que no sea igual en la `cadena más corta`. Se hace esto por que la cadena más larga siempre será la que tiene el paso extra o el paso faltante.
32+
33+
Hay muchas formas de hacerlo, una de estas es:
34+
35+
```js
36+
const [lessWords, mostWords] = [original, modified].sort(
37+
(a, b) => a.length - b.length
38+
);
39+
```
40+
41+
Y ahora solo tendremos que encontrar el que no se repita en la `cadena más corta`:
42+
43+
```js
44+
return [...mostWords].find((x, i) => lessWords[i] != x) ?? "";
45+
```
46+
47+
Hay que tener en cuenta que al ser `strings` debemos usar el spread operator para poder usar los métodos de un array, como `.find()`.

retos/reto-3/main.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ function findNaughtyStep(original, modified) {
33
const [lessWords, mostWords] =
44
[original, modified].sort((a, b) => a.length - b.length)
55

6-
return [...mostWords].find((x, i) => [...lessWords][i] != x) ?? ""
6+
return [...mostWords].find((x, i) => lessWords[i] != x) ?? "";
77
}
88

99
module.exports = findNaughtyStep

0 commit comments

Comments
 (0)