- En una carta enviada a Nature el 31 de marzo de 1887, Lewis Carroll propuso un procedimiento para obtener mentalmente el día de la semana de cualquier fecha
- La fecha se divide en cuatro elementos: siglo, año, mes y día; luego se suman, conservando durante el cálculo solo el residuo al dividir entre 7 para reducir la complejidad
- Carroll decía que a él mismo le tomaba en promedio unos 20 segundos, y que un calculista rápido podría hacerlo incluso en menos de 15 segundos
- Las reglas incluyen la diferencia entre Old Style y New Style, la corrección por año bisiesto y los valores correspondientes a cada mes; el resultado final se interpreta como 0=Sunday, 1=Monday y así sucesivamente
- En los ejemplos de cálculo, el 18 de septiembre de 1783 da Thursday, y el 23 de febrero de 1676, tras la corrección por año bisiesto, da Wednesday
Método para dividir una fecha en cuatro elementos
- En una carta enviada a Nature el 31 de marzo de 1887, Lewis Carroll presentó un método para obtener por cálculo mental el día de la semana de una fecha específica
- La fecha de entrada se divide en cuatro partes
- Century-Item: los dos primeros dígitos del año
- Year-Item: el año después del siglo
- Month-Item: el mes
- Day-Item: el día del mes
- Se calcula cada elemento y se suma al total acumulado; si un elemento o la suma supera 7, se conserva solo el residuo al dividir entre 7
Reglas de cálculo para cada elemento
-
Century-Item
- En Old Style, se toma que termina el 2 de septiembre de 1752, y el valor del siglo se resta de 18
- En New Style, se toma que empieza el 14 de septiembre de 1752, y al residuo del valor del siglo al dividir entre 4 se le resta de 3, y luego se multiplica por 2
- Por ejemplo, para el Century-Item de 1811 se usan los dos primeros dígitos, 18
-
Year-Item
- Del año posterior al siglo se suman la cantidad de 12 que contiene, el valor restante y la cantidad de 4 que hay dentro de ese resto
-
Month-Item
- Si el nombre del mes empieza o termina con vocal, se resta su orden anual de 10
- Si a eso se le suma la cantidad de días de ese mes, se obtiene el valor del mes siguiente
- Los valores mensuales que se usan tras dividir entre 7 son los siguientes
- January 0, February 3, March 3, April 6, May 1, June 4
- July 6, August 2, September 5, October 0, November 3, December 5
-
Day-Item
- Se usa el propio día del mes
-
Corrección por año bisiesto
- Si la fecha cae en January o February de un año bisiesto, se resta 1 del total final
- Si el total es 0, primero se le suma 7 y luego se resta 1
- Un año bisiesto es un año divisible entre 4, pero en New Style los años de siglo son una excepción si el número de siglo no es divisible entre 4
- Como ejemplo, 1800 cae dentro de esa excepción en New Style
- El resultado final se interpreta como un número de día de la semana, donde 0 es Sunday, 1 es Monday, y así sucesivamente
Ejemplos de cálculo y fuente
- El resultado para el 18 de septiembre de 1783 es Thursday
- El 23 de febrero de 1676, tras la corrección por año bisiesto, da Wednesday
- Este procedimiento se conserva a través de Rediscovered Lewis Carroll Puzzles, 1995
1 comentarios
Comentarios de Hacker News
Este método se parece mucho al que uso, y al hablar con Art Benjamin vi que él también usaba uno similar. Hacerlo en 10 a 15 segundos es fácil, pero requiere práctica, muy poca memorización y algo de cálculo mental.
Yo lo uso seguido para mantener la intuición, y una vez que lo aprendes resulta sorprendentemente útil, así que lo sigues usando. J. H. Conway usaba otra técnica, la Doomsday rule, y para calcular fechas del año en curso me cambié a esa. Es más rápida y fácil, pero obtener el “Doomsday” de otros años es más difícil, así que en esos casos vuelvo al método original.
Por ejemplo, para 2024/05/24, sumas los 12 años desde 2012, los 3 años bisiestos, el número mágico de mayo 2 y el día 24, y tomas mod 7:
(12+3+2+24)=6, o sea viernes. Los números mágicos de cada mes se pueden memorizar como144 / 025 / 036 / 146, y si hace falta también se pueden calcular a partir del principio.144 : Jan, Feb, Mardebe entenderse como Jan=1, Feb=4, Mar=4.20+5+4+7 ≡ 1, así que esperaba domingo, pero en realidad era sábado; se debía a que 2032 es año bisiesto y la fecha es anterior al 29 de febrero.En estos casos, es decir, antes del 29 de febrero de un año bisiesto o hasta ese mismo día, hay que restar 1.
0, 1, -1, 0, 0, 1, 1, 2, 3, 3, 4, 4son los desplazamientos entre el día del año correspondiente al día 1 de cada mes y el día del año que tendría si todos los meses anteriores tuvieran 30 días.Por ejemplo, si los primeros 11 meses tuvieran todos 30 días, el 25 de diciembre sería el día
30×11+25=355, y al sumarle el 12.º desplazamiento, 4, se obtiene el día real 359. Esta secuencia de desplazamientos es fácil de memorizar y, una vez memorizada, los números mágicos por mes se obtienen comoMagic(n)=2n+Offset(n)+c.En los números mágicos
1 4 4 0 2 5 0 3 6 1 4 6,c=-1, y para diciembre queda2×12+4-1 ≡ 6 (mod 7). A la inversa, también se puede recuperar el desplazamiento calculandoMagic(n)-2n-ca partir de los números mágicos memorizados, recordando solo que el rango de desplazamientos es[-1,4].Mientras leía el artículo, terminé buscando la diferencia entre fechas de Old Style/New Style y lo que ocurrió en 1752. Según la Calendar (New Style) Act 1750, hasta el siglo XVIII, legalmente en Inglaterra el año comenzaba desde hacía siglos el 25 de marzo, es decir, en Lady Day.
Así que, por ejemplo, el día inmediatamente posterior al 24 de marzo de 1707 era el 25 de marzo de 1708, y el día posterior al 31 de diciembre de 1708 seguía siendo el 1 de enero de 1708; 1709 llegaba casi tres meses después. Qué bueno que lo cambiaron.
Me pregunto si en otros países también quedan muchos parches heredados de épocas antiguas como este.
Pero el método de Carroll asume que el 1 de enero es el primer día del año nuevo, por lo que no llega a la respuesta correcta, “Friday”. Curiosamente, quienes republicaron el método de Carroll no señalaron este error, y el artículo enlazado tiene el mismo defecto.
calde Linux tiene un manejo especial que reconoce septiembre de 1752: https://github.com/util-linux/util-linux/blob/9f15d2de8117732845b2e891a2d24d987ee4e3ed/misc-utils/cal.c#L1079cal 1752, en el calendario de septiembre faltan los días entre el miércoles 2 y el jueves 14.Aunque es debatido, también existe la explicación de que la transición al calendario gregoriano fue el origen del Día de los Inocentes: https://en.wikipedia.org/wiki/April_Fools%27_Day, https://en.wikipedia.org/wiki/Gregorian_calendar
Es difícil seguir el método de cálculo del elemento del mes del texto. El texto explica que, si el mes empieza o termina con una vocal, se resta de 10 el orden de ese mes dentro del año y, si a eso se le suma la cantidad de días de ese mes, se obtiene el elemento del mes siguiente.
Pero diciembre, el mes anterior a enero, no empieza ni termina con vocal, así que no debería restarse de 10 y debería dar
12+31 ≡ 1; sin embargo, el texto dice 0. Febrero también, como January termina en vocal, daría10-1+31 ≡ 4, pero el texto dice 3; y marzo tampoco cuadra si se calcula tomando como base February.Abril y mayo sí cuadran, pero junio vuelve a no hacerlo, así que no sé qué estoy entendiendo mal.
La lógica de
(10-orden)+días mod 7solo encaja, tomando como base el mes anterior, en meses alternos como May, July, September y November, y la regla de las vocales parece más bien una regla mnemotécnica para recordar a qué meses aplicar este cálculo. Para los demás meses parece usarse elitem+days mod 7del mes anterior, pero no queda claro de dónde se deriva esa interpretación en el texto.Enero no tiene mes anterior, así que se toma todo como 0 y el resultado también queda en 0. No hace falta calcular mes por mes desde enero hasta el mes deseado; si un mes empieza o termina con vocal, se puede usar el atajo de que el número de elemento de ese mes es
10-número del mes. Aquíyno cuenta como vocal. O quizá sea más fácil simplemente memorizarlo.El algoritmo de Carroll fue evolucionando con el tiempo. El First Sunday Doomsday Algorithm (https://firstsundaydoomsday.blogspot.com/2009/12/quick-start-guide.html) incluye mejoras publicadas hasta 2023, y también incorpora la regla “odd+11” de Fong & Walters para calcular el código del año: https://arxiv.org/abs/1010.0765
Tengo un texto que dejé preparado porque me parece una forma más intuitiva de calcular esto: https://gcanyon.wordpress.com/2013/04/09/a-better-way-to-calculate-the-day-of-the-week/
Es realmente interesante ver a Art Benjamin hacer esto en una charla TED. Si se mira con atención, se ve que va siguiendo los cálculos intermedios con gestos de la mano.
Una vez que lo sabes parece obvio, pero es muy ingenioso. Empieza en el minuto 7:47 de https://www.ted.com/talks/arthur_benjamin_a_performance_of_mathemagic
Si calculamos hoy, es decir, el 24 de mayo de 2024, con el método de Lewis Carroll, queda así. El elemento del siglo, al ser el siglo XX, es
20/4=5, resto 0,3-0=3,3×2=6.El elemento del año es
24/12=2, resto 0, y como hay 0 cuatros dentro de eso,2+0+0=2. El elemento del mes es May=1 según el texto, y el elemento del día es 24. Sumando todo:6+2+1+24=33;33 mod 7 = 5, así que resulta viernes.A quienes dicen que la notación no es importante, les diría que toda la matemática antes de conseguir una notación nueva y mejor se veía así.
Incluso puede decirse que en matemáticas casi no hay nada más importante que la notación, y lo mismo ocurre en ciencias de la computación. Esta es también la razón por la que, cuando las variables son explícitas, los lenguajes de la familia Lisp son una opción evidente.
A comienzos de los años 1600 era “The white king commands his owne knight into the third house before his owne bishop.”; a mediados de los 1700,
K. knight to His Bishop's 3d.; a comienzos de los 1800,K.Kt. to B.third sq.; hacia 1890,KKt-B3; a mediados de los 1900,N-KB3; y hoy esNf3, o♘f3si se quiere evitar el nombre de la pieza según el idioma: https://www.knightschessclub.org/the_history_of_notation.htmlSi lo hizo en menos de 20 segundos, merece llamarse impresionante. Él no se consideraba a sí mismo un calculista rápido.
Escribí un script en Python para calcular el día de la semana y, al ingresar
2024-05-24, devuelve Friday. Funciona sumando el elemento del siglo, el elemento del año, el arreglo de elementos del mes y el elemento del día, y aplicando la corrección por año bisiesto para enero y febrero.Hice que, para fechas anteriores al 14 de septiembre de 1752, use un elemento de siglo separado.
Estas fechas desaparecidas no se aplicaron de manera uniforme en todo el mundo, y como el momento de adopción variaba según el país y la religión del registrador, siguen siendo un dolor de cabeza en los registros históricos.