Tuesday, October 2, 2012

Cuenta Larga Maya y Python


Hoy el blog va a tomar un giro un poco diferente pero este post va relacionado con la carrera que curso, la Licenciatura en Historia. Llegando hoy a clase de México Prehispánico con la Profesora Carmen Molina tuvimos la oportunidad de aprender acerca de la cuenta larga Maya, un tanto complicada pero sorprendente para una civilización prehispánica o “primitiva”, que de primitiva no tiene absolutamente nada, que me hace compararla incluso con lo que hoy conocemos como código binario.

El concepto funciona de la siguiente manera.

Los Mayas usaban múltiplos de 20, de hecho un año tenia 360 días por lo que tenia 18 meses de 20 días, mas 5 días de augurios, lo cual nos da un sorprendente total de 365 días, cosa mas que fascinante, nuevamente, para una cultura que existió hace siglos en el área de la península de Yucatan y Guatemala, al igual que otros fragmentos perdidos por ahí en ese segmento.

Mientras se nos explicaba la cuenta larga me di cuenta que sacar la cantidad es un tanto complicado a mano o calculadora, puede fallar, por lo que me di a la tarea de generar un pequeño pedazo de código en Python, un lenguaje de script que no ocupa compilarse, para correr la cuenta larga y obtener la fecha en el calendario gregoriano. El código lo libero bajo la GPL y espero que le sirva a quien quiera que lo encuentre.

¡Saludos y animo que existe todavía mucho camino por recorrer!

Nota: Para usar este script se ocupa tener instalado Python2.6 o 2.7, de hecho no importa mucho la versión, pero que este disponible y listo en la maquina. El archivo puede ser guardado con el nombre que gusten e incluso aunque no se corra directo de la consola debe funcionar aunque el resultado, si se corre desde Windows, puede desaparecer una vez que se termine de hacer la suma. De igual manera se incluyo un ligero stop por medio de un raw_input para dar tiempo de analizarlo, adicionalmente los comentario explican que es cada cosa. El script puede ser copiado así como se muestra y ser pegado en un notepad o cualquier parecido y debería funcionar como tal aunque no se da ninguna garantía por aquello de problemas de compatibilidad pero con todo gusto se me puede hacer saber cualquier problema y tratare de ayudar a solucionarlo. Como nota final solo hay que salvarlo con la terminación .py para que el interprete de Python lo corra como debe ser.

El archivo puede ser nombrado como sea, en este caso lo nombre cuentalarga.py

  1. def cuenta_larga():  
  2.     print """ 
  3.     Este script calcula la cuenta larga Maya y la convierte al Gregoriano.  
  4.     Es un aproximado que da unicamente el anyo, no da mes ni dia. 
  5.     Dentro del codigo se contiene el comentario de como funciona el codigo. 
  6.     """  
  7.     baktun = input("Baktun: ")  
  8.     katun = input("Katun: ")  
  9.     tun = input("Tun: ")  
  10.     uinal = input("Uinal: ")  
  11.     kin = input("Kin: ")  
  12.     baktun = baktun*144000  
  13.     katun = katun*7200  
  14.     tun = tun*360  
  15.     uinal = uinal*20  
  16.     kin = kin  
  17.     # Las cantidades manejadas son dias, un baktun es 144000 dias, un katun es 7200,  
  18.     # un tun 360, un uinal es 20 y los kin son unidades individuales. Todas estas se  
  19.     # suman bajo la variable de gTotal para despues ser dividas entre 365, que es la  
  20.     # cantidad de dias que tiene un anyo comun, para asi generar una cantidad en   
  21.     # anyos gregorianos que despues se resta contra 3115, que es la epoca de la   
  22.     # antiguedad Maya. En teoria una vez que sale el numero si genera un numero  
  23.     # negativo, es decir marca -X este tendra el signo de menos removido y en lugar  
  24.     # de marcar d.e.C. marcara a.e.C. como debe corresponder por ser previo a la   
  25.     # epoca que nosotros demarcamos como la era Comun.  
  26.     gTotal = baktun+katun+tun+uinal+kin  
  27.     print gTotal  
  28.     gregoriano = gTotal / 365  
  29.     print gregoriano  
  30.     maya = gregoriano - 3115  
  31.     if "-" in str(maya):  
  32.         a = str(maya)  
  33.         final = a.replace("-","")  
  34.         print final, "a.C."  
  35.     else:  
  36.         print maya, "d.C."  
  37.         stop = raw_input("Presiona cualquier tecla para terminar...")  
  38.   
  39. cuenta_larga()

No comments:

Post a Comment

The Atlantean Thrones and the Valve

I can’t sleep, again. I see them all over me, figures that look like demons, human with horns of all kinds, twisted and spiraling in differ...