Aquí están los detalles del requisito:
time = ["09-13", "12-14"] getResult(time) = falseLa primera función es de 9 a. m. a 1 p. m. y la segunda comienza a las 12 p. m. Por lo tanto, no podrá ver cada función completa.
time = ["07-09", "10-12", "15-19"] getResult(time) = truepero no pude obtener el resultado. Estoy encontrando un desafío para hacerlo. alguien me ayuda?
aquí está mi intento:
const getResult = (time) => { const nums = []; let pre = 0; time.map((item,index) => { item.split('-').map((v,i) => { nums.push(+v);//converting as number }); }); const result = nums.map((v,i) => { if(!i) return; console.log(v-pre)//but logically this is not works pre = v; }) } //time = ["09-13", "12-14"]; //false time = ["07-09", "10-12", "15-19"] //true getResult(time); //should be falseGracias por adelantado.
Convierta cada rango en cada hora individual dentro del rango, luego:
const getResult = (ranges) => { const filled = []; for (const range of ranges) { let [start, end] = range.split('-').map(Number); while (end !== start) { // Exclusive if (filled.includes(start)) return false; filled.push(start); start++; } } return true; }; console.log(getResult(["09-13", "12-14"])); console.log(getResult(["07-09", "10-12", "15-19"]));Su enfoque actual no parece tener ninguna noción de convertir los rangos en sus horas individuales o de identificar superposiciones.
false .true . function isValid(time) { const sortedTime = [...time].sort((a, b) => { const slotA = Number(a.split("-")[0]); const slotB = Number(b.split("-")[0]); return slotA - slotB; }); let last; for (let t of sortedTime) { const [start, end] = t.split("-").map(Number); if (last && start < last) { return false; } last = end; } return true; } console.log(isValid(["12-14", "09-13"])); console.log(isValid(["10-12", "07-09", "15-19"]));Su formato ya es útil para comparaciones directas >= , una vez que dividimos los valores en sus - . Entonces, simplemente podemos ordenar los valores, luego verificar que en todos los casos después del primero, que la parte inicial (antes de - ) sea al menos tan grande como la parte final (después de - ) del valor anterior. Podría verse así:
const feasible = (times) => [... times] .sort () .every ((t, i, a) => i == 0 || t .split ('-') [0] >= a [i - 1] .split ('-') [1]) console .log (feasible (["09-13", "12-14"])) console .log (feasible (["07-09", "10-12", "15-19"])) Usamos el i == 0 || simplemente para evitar probar el primero de los valores ordenados.
Esto implica dividir cada uno de los valores dos veces (bueno, excepto el primero). Si esta ineficiencia le molesta, podemos resolverla (usando más memoria; ¡siempre hay una compensación!) dividiéndolos y guardando el resultado:
const feasible = (times) => [... times] .sort () .map (s => s .split ('-')) .every ((t, i, a) => i == 0 || t [0] >= a [i - 1] [1])