En este post voy a resolver un ejercicio de JavaScript tomado originalmente de Codewars.
Un día desafortunado o sin suerte es un viernes que además es 13.
Nuestra tarea es escribir una función que reciba el número de un año y devuelva la cantidad de “días desafortunados” que tiene, es decir, el conteo de viernes 13 que existen en ese año.
Vamos a trabajar con fechas, porque esa es la forma más fácil según mi forma de ver las cosas.
Hacemos un ciclo y recorremos cada mes de ese año (las conversiones de días, años bisiestos y esas cosas las maneja JS) poniéndole el valor de 13 en la fecha; después llamamos a getDay
que devuelve el día de la semana y si es viernes aumentamos un contador.
Al terminar el ciclo, regresamos ese contador. Cabe mencionar que los meses en JavaScript comienzan en 0 por lo que 0 es enero y 11 es diciembre.
Para el día de la semana, 0 es domingo, 1 es lunes y así hasta que el sábado es 6. Por lo tanto, para saber si es viernes comprobamos si el día es 5.
El código es el siguiente:
const cantidadDeDiasDesafortunados = anio => {
let fecha = new Date(anio, 0),
contador = 0;
// Hacer un ciclo desde enero hasta diciembre
for (let monthNumber = 0; monthNumber < 12; monthNumber++) {
fecha.setMonth(monthNumber);
// Ir al día 13 de ese mes
fecha.setDate(13);
// Y comprobar si es viernes
if (fecha.getDay() === 5) contador++;
}
return contador;
}
Al inicio creamos una fecha con el año que nos pasaron, en el mes de enero. Cambiamos de mes y en cada mes comprobamos si el día 13 es viernes.
A continuación dejo el código completo para probar la función:
const cantidadDeDiasDesafortunados = anio => {
let fecha = new Date(anio, 0),
contador = 0;
// Hacer un ciclo desde enero hasta diciembre
for (let monthNumber = 0; monthNumber < 12; monthNumber++) {
fecha.setMonth(monthNumber);
// Ir al día 13 de ese mes
fecha.setDate(13);
// Y comprobar si es viernes
if (fecha.getDay() === 5) contador++;
}
return contador;
}
console.log("Probando con ", 1586, "Debería ser: 1. ¿Correcto?: ", cantidadDeDiasDesafortunados(1586) === 1);
console.log("Probando con ", 1001, "Debería ser: 3. ¿Correcto?: ", cantidadDeDiasDesafortunados(1001) === 3);
console.log("Probando con ", 2819, "Debería ser: 2. ¿Correcto?: ", cantidadDeDiasDesafortunados(2819) === 2);
console.log("Probando con ", 2792, "Debería ser: 2. ¿Correcto?: ", cantidadDeDiasDesafortunados(2792) === 2);
console.log("Probando con ", 2723, "Debería ser: 2. ¿Correcto?: ", cantidadDeDiasDesafortunados(2723) === 2);
console.log("Probando con ", 1909, "Debería ser: 1. ¿Correcto?: ", cantidadDeDiasDesafortunados(1909) === 1);
console.log("Probando con ", 1812, "Debería ser: 2. ¿Correcto?: ", cantidadDeDiasDesafortunados(1812) === 2);
console.log("Probando con ", 1618, "Debería ser: 2. ¿Correcto?: ", cantidadDeDiasDesafortunados(1618) === 2);
console.log("Probando con ", 2132, "Debería ser: 1. ¿Correcto?: ", cantidadDeDiasDesafortunados(2132) === 1);
console.log("Probando con ", 2065, "Debería ser: 3. ¿Correcto?: ", cantidadDeDiasDesafortunados(2065) === 3);
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Esta web usa cookies.