Autor Tema: Doomsday algorithm o Cómo saber qué día de la semana es una fecha

0 Usuarios y 1 Visitante están viendo este tema.

08 Noviembre, 2023, 11:15 pm
Leído 2842 veces

d

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 18
  • País: 00
  • Karma: +0/-0
Muy bueno pero que versión optimizada del algoritmo has encontrado y que sea la más eficiente en relación al calculo mental.
Spoiler
Vamos a ver en este post una forma para saber qué día de la semana fue cualquier fecha. El algoritmo consiste en calcular ciertos coeficientes a partir de la fecha (día, mes y año) y efectuar ciertos cálculos con ellos para quedarnos con un número entre 0 y 6. Después sabiendo qué número es el que corresponde a cada día conseguiremos resolver el problema. Vamos a explicar el método llevando a la vez un ejemplo: mi cumpleaños del año que viene, 1 de Mayo de 2007, que de antemano os digo que es martes:

1.- El siglo: El primer coeficiente que necesitamos, llamémosle A, lo conseguimos con el siglo al que pertenece el año de la fecha siguiendo esta tabla:

1700…1799   1800…1899   1900…1999   2000…2099   2100…2199   2200…2299
+5   +3   +1   0   -2   -4
En nuestro ejemplo obtenemos que A = 0

2.- Año: Tomamos los dos últimos dígitos del año en cuestión y a ese número de dos cifras le sumamos un cuarto del mismo (despreciando los decimales). Eso nos proporciona el segundo coeficiente, digamos B.

En nuestro caso: 7/4 = 1′75. Despreciamos los decimales y nos queda 1. Como los dos últimos dígitos son 07 tenemos que B = 8.

3.- Años bisiestos: Éstos son los que cumplen que sus dos últimas cifras forman un múltiplo de 4 (por ejemplo, 1992 o 2004) excepto los terminados en 00. Entre estos últimos sólo son bisiestos los múltiplos de cuatrocientos (por ejemplo 2000). Nuestro tercer coeficiente, C depende de ellos: si el año es bisiesto, y el mes es enero o febrero el coeficiente será C = –1. En cualquier otro caso C = 0.

En nuestro ejemplo, como 2007 no es bisiesto tenemos que C = 0.

4.- Mes: El cuarto coeficiente, D, nos lo da la siguiente tabla:

Enero   Feb.   Marzo   Abril   Mayo   Junio
6   2   2   5   0   3
Julio   Agosto   Sept.   Oct.   Nov.   Dic.
5   1   4   6   2   4
En nuestro ejemplo, como el mes es mayo, tenemos que D = 0.

5.- Día: El quinto coeficiente, E, es simplemente el día en cuestión. En este caso E = 1.

6.- Algoritmo: Tomamos todos los coeficientes calculados y los sumamos. Y después calculamos el resto módulo 7 del número que obtenemos. Eso lo podemos hacer restando 7 al resultado tantas veces como sea necesario hasta obtener un número entre 0 y 6 que llamaremos R.

En nuestro ejemplo:

A + B + C + D + E = 0 + 8 + 0 + 0 + 1 = 9
9 – 7 = 2

Por tanto R = 2

7.- Resultado: La asignación de números a cada día de la semana es la siguiente:

Lunes   Martes   Miércoles   Jueves   Viernes   Sábado   Domingo
1   2   3   4   5   6   0
Por tanto, como en nuestro ejemplo R = 2 tenemos que:

el 1 de Mayo de 2007 será martes
como en realidad ocurre.

Espero que os haya parecido interesante.

Fuente: Ese Primo
via gaussianos.com/como-calcular-que-dia-de-la-semana-fue/
[cerrar]

09 Noviembre, 2023, 05:44 pm
Respuesta #1

d

  • $$\Large \color{#6a84c0}\pi$$
  • Mensajes: 18
  • País: 00
  • Karma: +0/-0
por lo que veo
DD=CC+[[Y/12]]+Ymod12+[[(Ymod12)/4]]
DD doomsday
CC century code
luego las constantes
1/3 OR 1/4,2/28 OR 2/29,4/4, 6/6, 8/8, 10/10, 12/12, 5/9, 9/5, 7/11, and 11/7
para el año en cuestion(actual) es muy poco q se debe memorizar,
 por ejemplo este año 2023 es 2 (martes)
navidad (24 dec) de este año caeria un DD+5 q seria domingo
Es decir si alguien quisiera prescindir de un calendario para el año actual, solo bastaria memorizar solo un numero en el rango de 0 a 6.