¿Qué día de la semana fue?
Martin Gardner presentaba en una de sus columnas en el Scientific American hace ya unas cuantas décadas un brillante algoritmo, fácil de recordar y usar sin lápiz y papel, para obtener el día de la semana de cualquier fecha. Más tarde, no sólo este algoritmo, sino muchos otros más para efectuar trucos con cálculos fueron presentados en uno de sus libros, bajo el capítulo "Trucos de Calculístas Ultra-rápidos" (creo que así es como se tradujo al español). Hace mucho que no leo a Gardner—todos sus libros quedaron en casa de mis padres—pero un par de cuentas me han hecho recordar casi por completo el algoritmo que inspira esta entrada:
- Siglo. El primer coeficiente, σ, lo da el siglo siguiendo esta tabla:
1700
…
17991800
…
18991900
…
19992000
…
20992100
…
21992200
…
2299+5 +3 +1 0 –2 –4 - Año. Toma los dos últimos dígitos del año y súmale un cuarto de dicha cantidad (despreciando decimales, y sin redondear). Ésto da el segundo coeficiente,
α
. - Años bisiestos. Éstos son los terminados en múltiplos de cuatro, excepto los terminados en doble cero. Entre estos últimos, sólo son bisiestos los múltiplos de cuatrocientos. En dicho caso, si el año es bisiesto, y el mes es o bien enero o febrero, el coeficiente correspondiente,
β
, es –1. En cualquier otro caso, cero. - Mes. El cuarto coeficiente, μ, viene dado por la siguiente tabla:
E F M A M J J A S O N D 6 2 2 5 0 3 5 1 4 6 2 4 - Día. El quinto coeficiente,
δ
, es símplemente el día del mes. - Algoritmo: Calcula el residuo módulo siete de la suma
(σ + α + β + μ + δ)
. El uno corresponde al lunes, y así consecutivamente hasta el siete (cero), que se corresponde con el domingo.
Ejemplo: 22 de agosto de 1973.
σ α
β
μ δ
( σ
+α
+β
+μ
+δ
)
mod 7día 1 73+⌊73/4⌋
= 73 + 18
= 910 1 22 115 mod 7 = 3 Miércoles
1 Commentarios:
Muy interesante el algoritmo. Recuerdo haber visto alguna vez cosas parecidas, pero éste no lo conocía. Te lo pido prestado para publicarlo la semana que viene en mi blog. Te enlazo esta entrada.
Saludos :)
Post a Comment
<< Página Principal