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

Servidor HTTP en Android con Flutter

El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…

3 días hace

Imprimir automáticamente todos los PDF de una carpeta

En este post te voy a enseñar a designar una carpeta para imprimir todos los…

4 días hace

Guía para imprimir en plugin versión 1 desde Android

En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…

1 semana hace

Añadir tasa de cambio en sistema de información

Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…

2 semanas hace

Comprobar validez de licencia de plugin ESC POS

Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…

2 semanas hace

Imprimir euro € en impresora térmica

Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…

3 semanas hace

Esta web usa cookies.