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.
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.
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.
const original = 'abcd'
const modified = 'abcde'
findNaughtyStep(original, modified) // 'e'
const original = 'stepfor'
const modified = 'stepor'
findNaughtyStep(original, modified) // 'f'
const original = 'abcde'
const modified = 'abcde'
findNaughtyStep(original, modified) // ''
A tener en cuenta:
- Siempre habrá un paso de diferencia o ninguno.
- La modificación puede ocurrir en cualquier lugar de la cadena.
- La secuencia original puede estar vacía
function findNaughtyStep(original, modified) {
/*
Lo primero que debemos hacer es determinar cual es el el arreglo de pasos mas grande
para que así al recorrerlo como punto de partida nos aseguremos de relalizar todas
las comparaciones necesarias.
*/
const o = original.length
const m = modified.length
/*
para guardarnos el orden de acuerdo al tamaño de los arreglos usamos un objeto utilizando
dicho tamaño como key y un arreglo de ambos ordenados de mayor a menor
*/
const sequences = {
[o]: [original, modified],
[m]: [modified, original],
}
/*
haciendo uso de Math max podemos seleccionar el orden adecuado donde iniciemos
nuestra busqueda desde el mayor de los elementos
*/
const [steps, reference] = sequences[Math.max(o, m)]
// retornamos el primer elemento que no coincida, dando por hecho que fue eliminado o tiene un paso extra
return [...steps].find((step, i) => step !== reference[i]) ?? ''
}