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

Cancelar trabajo de impresión con C++

En este post te quiero compartir un código de C++ para listar y cancelar trabajos…

4 semanas hace

Copiar bytes de Golang a JavaScript con WebAssembly

Gracias a WebAssembly podemos ejecutar código de otros lenguajes de programación desde el navegador web…

2 meses hace

Imprimir PDF con Ghostscript en Windows de manera programada

Revisando y buscando maneras de imprimir un PDF desde la línea de comandos me encontré…

2 meses hace

Hacer pruebas en impresora térmica Bluetooth Android

Esta semana estuve recreando la API del plugin para impresoras térmicas en Android (HTTP a…

2 meses hace

Limpiar clave PEM

Hoy te enseñaré a extraer la cadena base64 de una clave PEM usando una función…

2 meses hace

Foco con Telegram, apagador de 3 vías, relevador y ESP8266

Encender un foco con un Bot de Telegram es posible usando una tarjeta como la…

2 meses hace