Feriados

Junio 16, 2009

Si algún día llego a tener algún cargo legislativo (cosa que dudo) mi primer proyecto de ley será declarar feriado el primer día hábil del año.

Seguramente duraré poco como legislador…


La funcioncita

Mayo 16, 2009

La funcioncita es un juego que solíamos jugar con amigos en la facultad.

Un jugador define en secreto una función real de una variable; por ejemplo, f(x)=cos(x)+x . El otro jugador va preguntando el valor de f(x) para distintos valores de x , hasta que adivina cuál es la función elegida por su oponente. Luego intercambian roles; el que adivina pidiendo menos datos es el ganador. Es un lindo juego, aunque requiere un sistema de honor difícil de formalizar, por la dificultad intrínseca de definir cuáles funciones “valen” y cuáles no.

Hace unas semanas discutíamos variantes con un amigo, y se nos ocurrió una versión “acumulativa”, donde las funciones elegidas por un jugador pudieran ser usadas por su oponente en las siguientes rondas como componentes de nuevas funciones. Esto pone (presumiblemente) un límite a la complejidad, como ocurre en la payada a dos voces, donde cada payador continúa los versos del rival y debe tener mucho cuidado al usar rimas complicadas, pues él mismo deberá enfrentarlas cuando le toque nuevamente.

No llegamos a probar esta variante, pero la mecánica promete generar todo tipo de bucles y dilemas. Si alguien la prueba, no deje de comentarlo.


Oráculo

Mayo 23, 2008

Creo que los lectores de este blog que gusten de la programación y los juegos gustarán de la nueva competencia de Bits en el Ring.

A grandes rasgos, se trata de diseñar un programa que vaya prediciendo los sucesivos términos de varias secuencias numéricas, y diseñar secuencias numéricas para ser predichas por los demás programas.

¿El premio? Como siempre, gloria y fama casi inmortales… ;-)


Los tres filósofos

Mayo 16, 2008

He aquí un acertijo clásico cuyo origen desconozco, pero que tiene un inefable gustito bucloso. Creo que generará comentarios interesantes.

Un día tres filósofos griegos se sentaron bajo un viejo olivo, abrieron una botella de vino y comenzaron a discutir largamente la Cuestión Ontológica Fundamental: ¿Por qué algo existe?

Luego de un rato, el vino hizo su efecto y los tres se durmieron.

Mientras dormían, tres búhos completaron sus procesos digestivos y dejaron un pequeño regalito sobre la frente de cada filósofo.

Quizá por el impacto, los filósofos despertaron. Cuando se miraron unos a otros, los tres comenzaron a reír, hasta que el más inteligente se puso serio; luego el segundo, y por último el tercero.

¿Por qué?


La hora, referí

Marzo 15, 2008

Por supuestas razones energéticas, a medianoche atrasamos los relojes una hora.

Me pregunto si dentro de media hora deberemos hacerlo de nuevo.

Seguramente Leo Maslíah tuvo alguna vez la misma duda, y la canalizó en este magistral cuento.


Inmortalidad radial

Febrero 9, 2008

El amigo Matías (perdón por confundir su nombre anteriormente) nos informa de una versión radial de la receta para la inmortalidad:

Ayer escuché un programa de radio en el cual el conductor decía “me comprometo a pasar mañana una grabación de este mismo programa”.A pesar de que lo dijo solamente porque estaba cansado y quería irse de vacaciones, me di cuenta de que generaba inconscientemente un bucle infinito potencial.


El parser de Babel

Enero 24, 2008

Un tema informático que siempre me ha llamado la atención es el parsing o análisis sintáctico. Más allá de su interés práctico y teórico, da lugar a reflexividades deliciosas.

Un parser es, brevemente, un programa que “lee” un determinado texto (que puede ser humanamente inteligible o no) y lo convierte en una estructura útil para su posterior procesamiento. (Uso la palabra parser porque es más breve que la expresión «analizador sintáctico», que sería su traducción correcta del inglés).

Los parsers, como cualquier otro programa, pueden escribirse a mano; pero la tarea es algo tediosa cuando la estructura que deben reconocer es muy detallada.
Por eso se inventaron los programas generadores de parsers, cuya entrada es una gramática que define la estructura a transformar, y cuya salida es un programa que reconoce dicha estructura y hace las transformaciones necesarias.

Lo misterioso del asunto es que el generador de parsers contiene en su interior, a la vez, un parser: el que lee la gramática especificada. Y uno podría preguntar cómo se programó ese parser. Bueno, puede haber sido hecho a mano; pero lo interesante es que también pudo haber sido hecho automáticamente: generalmente, los lenguajes usados para especificar gramáticas formales pueden definirse usando gramáticas formales.

A partir de esto, se puede fantasear un poco:

Un programador entre muchos otros engendra un lengaje simple, L1, y escribe a mano el parser correspondiente P1.
Otro programador, discípulo del primero, escribe en el lenguaje L1 una gramática para un lenguaje más complejo L2, y usa P1 para construir automáticamente el parser P2.
Otro programador, discípulo del segundo, escribe en el lenguaje L2 una gramática para un lenguaje más complejo L3, y usa P2 para construir automáticamente el parser P3.
El proceso continúa, y tras incontables generaciones de programadores, habrá uno que engendre un lenguaje LN, de tal suerte que ninguna gramática que se pueda escribir con él sea más compleja que la del propio LN. Poseedor del parser PN, este programador será análogo a un dios.


Un juego inductivo

Diciembre 26, 2007

Quizá les guste este juego inductivo, mezcla de varios que he jugado. Creo que reúne lo esencial de cada uno.

No hacen falta elementos. La mecánica es esta:

Por turno, cada jugador menciona un ente cualquiera (sin repetir los que ya hayan sido usados). Los “entes” pueden ser palabras, números, objetos reales, personas, etc; el rubro puede elegirse de antemano. La idea subyacente es que todos los entes deben cumplir alguna condición, aunque esa condición no es explícita.

Luego de que un jugador menciona un ente, el jugador siguiente tiene dos opciones: mencionar otro ente, con lo cual el turno pasa al siguiente jugador, o bien desconfiar.
Si desconfía, el jugador anterior debe explicar la condición que, en su opinión, cumplen todos los entes mencionados; si no puede, el jugador que desconfió gana un punto y él pierde un punto. Si explica satisfactoriamente la condición, gana un punto, y el que desconfió pierde un punto.
En cualquier caso, vuelve a comenzar el juego desde el jugador que ganó el punto.

Se juega a un total de puntos determinado.

Unas rondas de ejemplo entre los jugadores A, B y C.

A: Violeta
B: Rosa
C: Celeste
A (que quizá estaba pensando en flores): ¡Desconfío!
C: Son colores.
A: Ah, tenés razón. Perdí.
C (comenzando otra ronda): Alga
A: Seta
B: Gama
C: Quinto
A: Vaca
B: ¡Desconfío!
A: La verdad que dije cualquier cosa. Ganaste.

Nótese que la condición puede quedar sin explicar, lo cual en mi opinión hace más divertido al juego. También pueden darse situaciones divertidas por la diferencia de criterios de los jugadores sobre si determinada condición es “satisfactoria” o no.


El maltratado conjunto vacío

Noviembre 19, 2007

El conjunto Vacío es mi objeto matemático favorito. Me complace su bella y austera estructura interna, aunque más de uno podría decir que no la tiene, y casi le daría la razón; pero es tema para discutir más filosóficamente.

Más allá de la percepción estética personal, lo que me lleva a apreciarlo es cierto maltrato que siempre ha sufrido por parte de personas inescrupulosas. Por ejemplo, cuando lo tratan como caso especial de teoremas o construcciones inductivas. Por supuesto, a veces esta distinción es correcta, y casi le da categoría frente a sus colegas más atiborrados. Pero la mayor parte del tiempo me quedo con la sensación de que el pobre Vacío es denigrado, apartado, discriminado.

Un ejemplo: la definición de inclusión de conjuntos. He visto indignado cómo una profesora de Álgebra explicaba:

Se dice que A está incluido en B cuando A es vacío, o bien cuando todos los elementos de A pertenecen a B.

Además de discriminarlo, usa vacío como adjetivo en lugar de sustantivo, lo cual es más denigrante… ¿Y no sería mejor una definición que no use esa horrorosa disyunción?

Aquí pongo un ejemplo, seguramente mejorable:

Se dice que A está incluido en B cuando no hay elementos de A ajenos a B.

Es mucho más concisa, y creo que hasta obliga a pensar más en el concepto, a aprenderlo mejor.

Otra cosa que me indigna es que se diga, por ejemplo, que muchas propiedades de los conjuntos son trivialmente válidas para el conjunto Vacío. ¿Dónde está lo trivial? Ya quisiera verlos yo cumplir tantas condiciones con tan poca estructura.

En fin, ya me enojé. Mejor termino por hoy. Pero retomaré el tema.


Cómo inducir mejor a la inducción

Noviembre 6, 2007

En matemática los bucles son omnipresentes, en parte debido al poder expresivo de las definiciones y demostraciones inductivas.
Este tipo de definiciones son algo difíciles de atrapar para algunas personas; y más si se le da desde el principio un enfoque inadecuado.

Daré un ejemplo simple: la función factorial, representada habitualmente en forma sufija con el símbolo «!» (Por ejemplo, el factorial de 7 se expresa como 7!). Esta notación fue usada por primera vez por Christian Kramp en 1808.
El uso más prosaico que se le da a la función factorial es en cálculos de combinatoria: n! es la cantidad de maneras de ordenar n objetos distintos.

Se la puede definir de formas no inductivas; la más directa (y casi repulsiva) es esta:

n! = \prod_{i=1}^{n} i

O sea, el producto de todos los números enteros desde 1 hasta n.
En contextos informáticos es más eficiente definir funciones simples como esta en formas iterativas en lugar de inductivas; pero ese es un tema para tratar en mayor profundidad más adelante.

Entre las formas inductivas de definirla, que son mucho más interesantes, mi preferida es la que usa dos igualdades:

0! = 1

n! = n (n-1)!

Y he aquí el problema: a veces, luego de escribir esta definición, la gente se apresura a aclarar que la segunda igualdad sólo se aplica cuando n>0; sin embargo nos parece que es mucho más pedagógico no decir nada y dejar a los oyentes digerir lentamente la definición.
Es más, quizá lo más estimulante sería presentar las igualdades en orden inverso:

n! = n (n-1)!

0! = 1

De esta manera se refuerza la dirección de la interpretación. La segunda igualdad asume el rol de freno, en lugar caso base de la definición inductiva, que es un concepto más difícil de adoptar por primera vez.

Por supuesto, en caso de duda siempre se puede aclarar según sea necesario, y en un libro sería casi obligada la aclaración; pero en un aula, o divagando con amigos, creo que es mejor la última forma, que es la que usaría yo si enseñara matemática.