javascript

JavaScript: cantidad de viernes 13 que tiene un año (ejercicio resuelto)

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);

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

2 semanas hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.