|
| 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()`. |
0 commit comments