Bienvenido al sector de Internet que no sabías que existía.

viernes, 10 de mayo de 2019

Cómo ser un calendario humano (remake)

Un remake de una vieja entrada... Disponible aquí. A ver si lo logro explicar mejor.

A menudo para entretener a la gente le pido su fecha de nacimiento... "26 de septiembre de 1999". Y luego les digo "¿te acordás si ese domingo llovió o había sol?". La mayoría se ríe, alguno que otro se queda un poco perplejo, existen también los que responden "ah no pero vos estás completamente demente". Hay de todo, como en todos los aspectos de la vida, mucha variedad.
Pero también están los que preguntan, con sinceridad... "decime, ¿cómo es que hacés eso? Quiero aprender". Así que les dedico la siguiente explicación:

Vamos al grano. ¿Qué hace falta?
Mi respuesta es: saber sumar, saber lo que es un número par, saber dividir por 2, saber las tablas del 7 (ni siquiera hace falta saberla completa), y tener la suficientes ganas de aprender esta técnica como para practicarla un poquito, porque, bueno, lleva un poco de práctica agarrarle la mano.

Y entonces, vos decime, ¿qué sumo?
Primero, se van a sumar unos cuantos números y al final vas a tener que hallar el resto de eso al dividir por 7 (o la congruencia módulo 7, como se le llama). En español: si te queda 71, como 70 es múltiplo de 7 (7*10) solo nos importa el 1 que sobra. Porque 71 = 70+1, entonces 71 = 1 (mod 7). Y dada esta característica del método, no hace falta sumar todos los números, sino que alcanza con sumar los mod 7 de cada uno.
Nota: se divide todo por 7 porque la semana tiene 7 días. Entonces el día 8 es lo mismo que el día 8-7 = 1. Etc.
Esta es una forma de agilizar un poco las sumas que hay que hacer mentalmente, ejemplo:

  • 71 + 14 + 5 = ummm ni idea
  • ah pero 71 es 1, 14 es 0, 5 es 5
  • entonces hago 1+0+5 y es lo mismo
  • 71+14+5 = 6 (mod 7)
Jajá, lo tengo en cuenta... pero decime qué tengo que sumar, ctm
Andando:

  1. Sumar el día. En 26 de septiembre de 1999, el "día" es "26"
  2. Sumar el código del mes. Cada mes tiene un valor asignado... solo hay que memorizarlo, no son muchos!
  3. Sumar el código del 'siglo'. Cada año comienza con 2 números: 1999 con 19, 2000 con 20, etc. Cada siglo tiene un código asignado, hay que memorizarlo pero es sumamente sencillo, son solo 2 números a efectos prácticos, salvo que quieran calcular fechas del año 1600 o por ahí, ahora lo explico.
  4. Sumar el 'valor del año'. Probablemente este sea el paso más trabajoso. Pero básicamente, consiste en lo siguiente: el 'año' son los dos últimos dígitos del año entero (1999=99, 2015=15, etc). Entonces el 'valor del año' se obtiene sumando el año + el año dividido 4, todo eso módulo 7. Puede resultar un poco complicado de calcular, pero hay algunos atajos. Ahora lo explico.
  5. Nota: Restarle 1 al resultado si el año es bisiesto y el mes es enero o febrero. Ojo con esto, casi nunca pasa pero existe el caso.
Entonces para 26 de septiembre de 1999, las sumas serían:
26 + código(septiembre) + código(19xx) + (99+99/4)
o lo que es lo mismo, todo mod 7, y reemplazando por los códigos (ya lo explico, aguantame!)

5 + 4 + 1 + (1 + 3) = 14 = 0
entonces como 0 = domingo, 1 = lunes, 2 = martes... etc, decimos que fue un domingo.
Nota: fijate que cambié 26 por 5 porque 26 = 21+5, y 99 por 1 porque 99 = 98+1 = 14*7 + 1, etcétera. Es más fácil para hacer las sumas mentalmente.

Bueno, eso se entiende, pero explicame los códigos que no entiendo nada.
Okey. Para los meses tenés que aprenderte esto (te dejo algunas reglas mnemotécnicas también):
Lo mejor es aprenderlo con práctica, y repitiendo. Realmente, no son muchas, son solo 12. Con algo de práctica y ganas se aprende.

  • Enero = -1 (enero es el primero, así que restamos 1. Nota: es lo mismo que sumar 6)
  • Febrero = 2 (como el número del mes)
  • Marzo = 2 (como su hermano febrero!)
  • Abril = 5 (como la cantidad de letras que tiene, ABRIL)
  • Mayo = 0 (la más fácil de sumar, porque no hay que sumar nada)
  • Junio = 3
  • Julio = 5 (igual que abril, la cantidad de letras que tiene JULIO)
  • Agosto = 1 (siempre me acuerdo esto como que es "a gosto", una sola 'a')
  • Septiembre = 4
  • Octubre = 6, o bien, -1
  • Noviembre = 2 (no! tiene 2 letras)
  • Diciembre = 4
A los que no le puse regla mnemotécnica es porque no tengo ninguna, simplemente me los acuerdo por práctica. Estás invitado a crear tus propias reglas.
Como vemos en el ejemplo anterior reemplacé septiembre por "4" porque es su código.

¿Y el código del año? No me veo haciendo todas esas cuentas...
Bueno. Antes yo había dicho que solo hacía falta saber dividir por 2 y saber cuando un número es par... Y creo que estamos de acuerdo que dividir por 2 no es algo que sea extremadamente difícil. Quizás hay algunos casos como 54/2 = 27 pero no es nada terrible. Así que:
Método más sencillo para obtener el código del año:

  1. Si el año es impar, restarle 1. Si no, nada.
  2. Dividirlo por 2.
  3. Repetir el paso 1 y 2.
  4. Sumar el año original + el resultado del paso 3, en módulo 7 si se prefiere, o los números completos, como quieras.
  5. Listo!
Ejemplo con 1957:

  • 57 => 56 (-1 porque es impar)
  • 56 => 28 (divido)
  • 28 => 28 (es par, no hago nada)
  • 28 => 14 (divido)
  • 57 + 14 = 1 + 0 = 1 (sumo todo en mod 7)
Con una mínima práctica, se puede hacer mentalmente. Pero bueno, no es el paso más fácil, estoy de acuerdo con eso.

Una pequeña nota sobre los años bisiestos:
Un año es bisiesto si sus dos últimos números son múltiplos de 4... Excepto que sean "00"... Excepto que el año sea 2000 (u otro múltiplo de 400, como 1600 o 2400 pero no nos importan mucho). Literalmente, esas son las reglas para años bisiestos. Súper extrañas. A nosotros solamente nos importa:

  • Si sus dos últimos dígitos son múltiplos de 4 y no son "00" es bisiesto (ej 1964, 2016)
  • Si es 2000 o 1600 o 2400 o cualquier múltiplo de 400, es bisiesto.
  • En todo otro caso, no es bisiesto (ejemplo: 2005 no es, 1900 no es, 1803 no es).
Entonces si estamos haciendo un cálculo con un año, y resulta ser bisiesto... al resultado final le tengo que restar "1" si y sólo si el mes es enero o febrero. Sino no hace falta.

¡Con esto ya estamos! Parece un poco largo, pero realmente es corto. Es decir, este programa hace todo eso y en solamente 3 (o 4, si se quiere) líneas:

def a(d,m,y):
    b=[0,6,2,2,5,0,3,5,1,4,6,2,4];c=[0,5,3,1];e=y%100;f=0
    if m<3 and y%4==0 and(y%100!=0 or y%400==0):f=1
    return(d+b[m]+c[y//100%4]+e+e//4-f)%7

Un poquito agolpado pero, realmente, eso es todo lo que describí recién. Es solo sumar 4 números y hallar el resto dividiendo por 7. Todo lo demás que escribí son ayudas para agilizar todo este tema cuando se hace mentalmente.

Tengo casi todo, me falta el 'código del siglo', wtf es eso?
Nada, es re fácil. Si el año arranca con 20xx, es "0". Si arranca con 19xx, es "1". Listo, eso nada más.

Peeero... si querés hacer cuentas más extremas, como en el año 1776, o en el futuro en el 2395, entonces te cuento un poco más (sentite libre de saltear esta parte si no te interesa):
Este 'código' sigue un período que es "1, 0, 5, 3", y se repite indefinidamente. Entonces, viene de la siguiente forma:
1600: 0
1700: 5
1800: 3
1900: 1
2000: 0
2100: 5
etc...
Así que solamente hace falta, o bien contar para adelante/atrás, o bien acordarse todos los valores para los siglos que te importen, o bien asociar que según los primeros dos dígitos mod 4 (20 = 0 mod4, 18 = 2 mod 4, etc), basta con fijarse qué número corresponde:
0 => 0
1 => 5
2 => 3
3 => 1

¿Por qué es útil saber la tabla del 7?
A la hora de calcular los 'módulo 7', no hace falta hacer toda la división ni nada... solamente, hay que pensar cuán cerca está el número del múltiplo de 7 menor más cercano. Con saber estos alcanza:
0
7
14
21
28
35
42
49
56
63
70
77
84
91
98
Los primeros son sumamente fáciles (0, 7, 14, vamos...), pero hay algunos que no son tan 'conocidos' como 98, u 84, incluso quizás no te suene el 63 o el 42... es bueno tenerlos frescos.

A continuación algunos ejemplos completos:


  • 31 de diciembre de 1977:
    • 31 + código(diciembre) + código(19) + (77+77/4)
    • 3 + 4 + 1 + (0 + 5) = 6, sábado.
    • Nota: el 3 y el 4 no los sumé, porque 3+4 = 7 = 0 (mod 7)
  • 14 de octubre de 2012:
    • 14 + código(octubre) + código(20) + (12+12/4)
    • 0 + 6 + 0 + (5+3) = 7 = 0, domingo.
    • Nota: sumar 5+3=8 es lo mismo que sumar 1.
  • 12 de junio de 1915:
    • 12 + código(junio) + código(19) + (15+15/4)
    • 5 + 3 + 1 + (1 + 3) = 6, sábado.
    • Nota: lo mismo, 5+3 es lo mismo que +1.
  • 4 de septiembre de 1998:
    • 4 + código(septiembre) + código(19) + (98+98/4)
    • 4 + 4 + 1 + (0 + 3) = 12 = 5, viernes
    • Nota: en este caso me pareció más fácil tomar 4+4 como +1 y hacer 1+1+3=5, salteándome el 12... a gusto de cada uno.
  • Para los atrevidos, 25 de febrero de 1778:
    • 25 + código(febrero) + código(17) + (78+78/4)
    • 4 + 2 + 5 + (1 + 5) = 3, miércoles
    • Nota: en este caso tomé 4+2 y 1+5 como ambos 6, o sea, como ambos -1. Entonces solo tuve que hacer 5-2 = 3.
  • 29 de febrero del 2000 (la mejor fecha de la historia):
    • 29 + código(febrero) + código(20) + (00+00/4)
    • 1 + 2 + 0 + (0+0) = 3... pero el 2000 fue bisiesto, le resto 1 = 2, martes!
    • Nota: es la mejor fecha porque fue el primer 29 de febrero (la mejor fecha) en un año con 3 ceros (el mejor año), en la historia de la humanidad.
  • 10 de mayo de 2019:
    • 10 + código(mayo) + código(20) + (19+19/4)
    • 3 + 0 + 0 + (5+4) = 12 = 5, viernes. Sí, hoy es viernes.
    • Nota: mañana es sábado pero hay clases igual. :c
Y bueno, eso es todo... Ahora solamente voy a describir, para los aventureros, cómo todo esto puede ser hecho incluso más rápido, y con menos cálculo mental... Aunque hace falta practicarlo muchísimo más. Bueno, acá voy:

Es posible memorizar el valor de año de los años entre el '90 y el 2019, para calcular las fechas más recientes en un abrir y cerrar de ojos. Además, sabiendo toda la década del '90 y los dosmiles, ya tenemos la fecha de nacimiento de mucha gente facilitada. ¿Alguna regla mnemotécnica? Sí, por supuesto. Te brindo del '90 a los '20, unos 40 años:

Algo a notar: el valor conforme aumenta el año, aumenta siempre en "1", salvo que se llegue a un año bisiesto, en ese caso se suma "2". Mirando un poco los ejemplos siguientes se puede razonar y entender bien:

los 90:

  • 90 = 0. Los primeros dos coinciden con su número final.
  • 91 = 1. Ves, te dije.
  • 92 = 3. Ahora, hasta el 96 tenemos que sumarle uno más a su último dígito nada más.
  • 93 = 4
  • 94 = 5
  • 95 = 6. Listo, tenemos más de la mitad ya.
  • 96 = 1. Estos se pueden aprender por repetición, son 4 nomás.
  • 97 = 2
  • 98 = 3
  • 99 = 4. Y este es el más útil, porque calcular el código de 99 mentalmente duele mucho.
los '00 y el 10 (súper fácil):

  • 00 = 0. Si es menor a 4, no podemos dividir por 4, así que queda el mismo número.
  • 01 = 1
  • 02 = 2
  • 03 = 3. Nada más que decir.
  • 04 = 5. A partir de ahora sí que podemos, así que solamente le sumamos 1.
  • 05 = 6
  • 06 = 0 (lo mismo que 7)
  • 07 = 1 (lo mismo que 8)
  • 08 = 3. Y bueno, acá es mejor aprendérselos, no cuesta nada.
  • 09 = 4. Este y el anterior.
  • 10 = 5. Acá pensamos que 5 es la mitad de 10 y ya está.
los '10:

  • 11 = 6. Hay una canción que se llama así.
  • 12 = 1. De acá hasta el 15 es como restar sus dos cifras, 2-1.
  • 13 = 2. 3-1, etc.
  • 14 = 3.
  • 15 = 4. Ya tenemos la mitad hecha.
  • 16 = 6. Se repite el 6.
  • 17 = 0. Es uno de los años "raíz", o sea que vale 0. ¡Es útil aprenderse las raíces!
  • 18 = 1. Me acuerdo porque viví este año hace muy poco.
  • 19 = 2. Es el año corriente.
los '20:

  • 20 = 4. Viene 4, 5 y 6 seguidos, sin mucha vuelta. A aprenderlos y listo.
  • 21 = 5
  • 22 = 6
  • 23 = 0. 23 es una raíz piola. Y la próxima viene pronto.
  • 24 = 2. De acá a la próxima raíz solamente es como restar sus cifras. 4-2.
  • 25 = 3. 5-2, etc.
  • 26 = 4.
  • 27 = 5.
  • 28 = 0. Llegamos a la otra raíz. Por supuesto, todos los múltiplos de 28 son raíces. (56, 84)
  • 29 = 1. Uno más que la raíz.
  • bonus: 30 = 2. Dos más que la raíz.
Y así se puede seguir. Lo conveniente, si ya se llega a este punto de desear memorizar los valores de cada año (son 100, por supuesto), es armar una lista y estudiarlos... O bien aprender las raíces y hacer cuentas en torno a eso... En fin, ya supone un esfuerzo, y no todos están dispuestos a enfrentarlo. Pero la herramienta está.

De ahora en más, la entrada anterior, del 9 de abril de 2014 (qué día fue? click) queda oficialmente obsoleta y la presente debe ser utilizada como referencia en su lugar.

Día.

0 comentarios:

¡Dejá tu comentario acá!

Para poner un comentario, escribí tu mensaje en la caja de texto y elegí en el menú desplegable como quién querés publicar el comentario. Si no tenés ninguna cuenta, seleccioná Nombre/URL o Anónimo. ¡GRACIAS!