DEV Community

Cover image for AdventJS - Reto #2: Nadie quiere hacer horas extras
José Ayrám
José Ayrám

Posted on

AdventJS - Reto #2: Nadie quiere hacer horas extras

Reto #2: Nadie quiere hacer horas extras

Reto #2: Nadie quiere hacer horas extras

Instrucciones:

Un millonario ha comprado una red social y no trae buenas noticias. Ha anunciado que cada vez que una jornada de trabajo se pierde por un día festivo, habrá que compensarlo con dos horas extra otro día de ese mismo año.

Obviamente la gente que trabaja en la empresa no le ha hecho ni pizca de gracia y están preparando un programa que les diga el número de horas extras que harían en el año si se aplicara la nueva norma.

Al ser trabajo de oficina, su horario laboral es de lunes a viernes. Así que sólo tienes que preocuparte de los días festivos que caen en esos días.

Dado un año y un array con las fechas de los días festivos, devuelve el número de horas extra que se harían ese año:

const year = 2022
const holidays = ['01/06', '04/01', '12/25'] // formato MM/DD

// 01/06 es el 6 de enero, jueves. Cuenta.
// 04/01 es el 1 de abril, un viernes. Cuenta.
// 12/25 es el 25 de diciembre, un domingo. No cuenta.

countHours(year, holidays) // 2 días -> 4 horas extra en el año
Enter fullscreen mode Exit fullscreen mode

Mi solución:

function countHours(year, holidays) {
  const weekendDays = [0, 6];
  let hours = 0;

  holidays.forEach( function(holiday) {
    let date = new Date(`${holiday}/${year}`);
    if(!weekendDays.includes(date.getDay())) {
      hours += 2;
    }
  });

  return hours;
}
Enter fullscreen mode Exit fullscreen mode

Explicación:

  • const weekDays = [0, 6]; Almaceno en un arreglo los días que nos han indicado que son fines de semana.
  • let hours = 0; Arranco el contador de horas en cero.
  • holidays.forEach( function(holiday) {} Recorro el arreglo para verificar los datos.
  • let date = new Date(${holiday}/${year}); Creo la fecha con el formato corto (MM/DD/YYYY)
  • if(!weekendDays.includes(date.getDay())) Verifico si el valor que me trae la función getDay() no se encuentra dentro del arreglo de weekendDays, es decir, si no es un fin de semana para sumar 2 horas al contador final.
  • return hours; Devuelvo la cantidad de horas calculadas.

Resultado:

  • 107 puntos
  • Complejidad cognitiva: 1.5
  • 2712 ops/s

Otras soluciones:

Nos leemos en el siguiente reto.

Top comments (0)