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.
Explicación del algoritmo
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.
Función que devuelve la cantidad de viernes 13 en JavaScript
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.
Probar función
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);