Skip to content

Manotecnia

11 agosto, 2013

Día de la semana:

Entonces, ¿cómo hago para programar el código que me diga qué día de la semana será dada una fecha?

En mis años de colegio me topé  en un libro de programación (de Turbo Pascal) un par de problemas que trataban de esto, presentado las pequeñas y no tan simples ecuaciones para resolver la pregunta anterior. Incluso había un problema para indicar cuándo empezaba la Semana Santa*.  Las ecuaciones que allí mostraban tenían ciertos errores que arreglé y que hoy he decidido compartir acá. Versiones hay varias, en una búsqueda rápida en wikipedia (que sirve para eso, búsquedas rápidas y no para investigaciones serias por no fuente bibliográfica primaria o secundaria), muestra esa variedad, algunas haciendo referencia a arreglos predefinidos.  En fin, el algoritmo con ecuaciones sería:

Sea f un arreglo de tres valores, día, mes, y año, haciendo referencia a cada uno como f.1, f.2, y f.3, respectivamente. El algoritmo al final devuelve D_s, el día de la semana que es un valor entre 1 -Lunes- y 7 -Domingo. Se  utiliza un resultado preliminar, P. Se diferencia entre Enero y Febrero, y los demás meses; la lógica de esto aún está pendiente por averiguar, aunque se puede ver por las divisiones entre 100 o 4, que el código parece discernir para años bisiestos.

 

Se utilizarán las funciones Q(x,y), que es el cociente de dividir x entre y, y Mod(x,y), que devuelve el residuo de dividir x entre y.

Inicio:

Si el mes f.2 es menor o igual a  2

entonces

de lo contrario

P=f.3+31*(f.2-1)+f.1-Q(4*f.2+23,10)+Q(f.3,4)-3*Q(Q(f.3,100),4)

Con este resultado preliminar se utiliza un filtro y ese será el día de la semana, D_s:

Si el mes f.2 es menor o igual a 2

entonces

D_s= 1 + Mod(3+P,7)

de lo contrario

D_s=1+Mod(5+P,7)

Fin.

Meses de 31 días o menos:

Existe una manera, una ayuda, una…. mano, que le recuerda a uno cuántos días tiene un determinado mes contando los nudillos de la mano, siendo las crestas el mes que le corresponde a 31 días, y los valles a los de menos de 31. Incluso en esto hay variantes, unos usan las dos manos, y otros solo una -como yo.  A esta técnica es a la que le llamo Manotecnia, haciendo el juego obvio con mnemotécnica. Y de esto, parace haber un poema medieval:

“Thirtey days hath November, Aprile, June, and September: Of twyecescore-eightt is but eine,And all the remnante be thrycescore-eine.”

“adaptación de un verso inglés que data nada menos que de 1425, en plena Edad Media.”

Como diversión, hice una pequeña aplicación en CDF (de wolfram, y que necesita el cdf-player). Dado que este sitio no toma el plug-in dejo una imagen y link al cual puede bajarse el archivo cdf. En sí, al pasar el mouse sobre cada parte sombreada aparecerá el mes y los días que tiene, siguiendo la manotecnia.

Manotecnia

* A pesar no ser religioso, me pareció un problema curioso y con aplicaciones prácticas en ciertas áreas de trabajo.

Links asociados:

30 días tiene Noviembre: ¿De dónde viene la rima mnemotécnica para contar los días de los meses?

Apéndice: ¿Cuánto empieza Semana Santa?

Dada la curiosidad y utilidad que puede tener en algunos países, dejo el código.

Primero, definiendo el inicio como el Domingo de Ramos y yr el año de interés, el algoritmo y sus funciones serían:

f_a(yr)=Mod(yr,19)

f_b(yr)=Mod(yr,4)

f_c(yr)=Mod(yr,7)

f_d(yr)=Mod(19*f_a(yr)+24,30)

f_e(yr)=Mod(2*f_b(yr)+4*f_c(yr)+6*f_d(yr)+5,7)

P(yr)=22+f_d(yr)+f_e(yr)-7

Note que P(yr) llama a las funciones anteriores.

Si al evaluar el año en P(yr) es mayor a 31, que indicará que el inicio será en Abril,

entonces el inicio será Abril el día P(yr)-31

de lo contrario, el inicio será en Marzo el día P(yr).

El resultado del código puede confirmarse en este link.

Anuncios
No comments yet

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: