Mostrando las entradas con la etiqueta Números. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Números. Mostrar todas las entradas

martes, mayo 27, 2014

Los 'ene' nombres, incluye concurso

En esta entrada, con menos interés potencial que cualquier otra en este pretencioso blog, trataré de combinar una reflexión sobre un pedazo de código de BASIC, una corrección a un gran autor, y un comentario sobre el misticismo light (el primero y el segundo).

Por alguna razón (trabajo procrastinado, tal vez) me desperté pensando en código, combinaciones y recursión, y mientras rumiaba granola y matoneaba neolaureanistas en las redes sociales, recordé 'El péndulo de Foucault' de Umberto Eco, y me apresuré a buscar el fragmento de código que aparece en el libro, el que es usado para generar todas las combinaciones del nombre de dios.

Aparte de encontrar un hermoso marcador de páginas de la Bauhaus que creía perdido hace años, rápidamente encontré el capítulo en el que Jacopo Belbo programa a Abulafia (el computador-personaje del libro), según las instrucciones de Abulafia (el cabalista sefardí del s. XIII), para hacer las permutaciones con las que se habría de encontrar HaShem (el nombre) con el que se pueden activar Golems y encontrar puesto en TransMilenio. El código que encontré se veía muy cabalístico, gracias a la tipografía monoespaciada con pinta de impresora de punto, y a los abstrusos comandos PRINT, FOR, IF, THEN, NEXT, END y otras combinaciones de letras sin sentido alguno para los no iniciados.

Una lectura rápida del código me reveló un error (¿deliberado?), que no permitiría que funcionara, que era una instrucción fuera de línea. Después, un intento de ejecución del código en una máquina virtual nostálgica reveló otro pequeño problema que pude corregir fácilmente. El código funcional para que se puedan ejecutar las instrucciones de Abulafia en Abulafia es:

10 REM anagrams
20 INPUT L$(1),L$(2),L$(3),L$(4)
30 PRINT
40 FOR I1=1 TO 4
50 FOR I2=1 TO 4
60 IF I2=I1 THEN 130
70 FOR I3=1 TO 4
80 IF I3=I1 THEN 120
90 IF I3=I2 THEN 120
100 LET I4=10-(I1+I2+I3)
110 PRINT L$(I1);L$(I2);L$(I3);L$(I4)
120 NEXT I3
130 NEXT I2
140 NEXT I1
150 END

Después de correr el programa exitosamente y leer los 24 posibles nombres sin que nada pasara, decidí hacer el ejercicio mental de explicarme el código en español, como para aclararle el universo cuál era mi intención:

10 REM anagrams

En realidad nada, sólo le recuerda al usuario qué hace el programa.

20 INPUT L$(1),L$(2),L$(3),L$(4)

Solicita al usuario las letras a combinar (L), y las asigna un valor de 1 a 4.

30 PRINT

Hace en la pantalla una línea vacía, para recordarnos de la falta de propósito del universo.

40 FOR I1=1 TO 4

Hace un proceso de iteración en el que en cada vez se usa un valor diferente a la variable I1, del 1 al 4.

50 FOR I2=1 TO 4
60 IF I2=I1 THEN 130

Hace otro proceso de iteración igual para la variable I2, pero pone una condición: Si el valor de I1 es igual al de I2, debe ir a otra orden, la que está en la línea 130, que le dice que use el siguiente número, con el objeto de no repetir números.

70 FOR I3=1 TO 4
80 IF I3=I1 THEN 120
90 IF I3=I2 THEN 120

Hace un proceso de iteración para I3, con la misma condición de antes, pero incluyendo los valores de I1 e I2, enviando a la instrucción en la línea 120.

100 LET I4=10-(I1+I2+I3)

Asigna el valor de I4 (LET quiere decir "sea", es el más místico de todos los comandos), que debe ser uno que no esté en las variables I1, I2 e I3. Para saber esto, se resta  mediante la resta de los valores de I1, I2, I3 a la sumatoria de los valores de todas las variables, en este caso, 1+2+3+4 = 10, revelando el valor del que falta. ¿No es magia esto?

110 PRINT L$(I1);L$(I2);L$(I3);L$(I4)

Aquí vemos el resultado de todo, se imprimen los valores de cada variable, en cada iteración, revelando una combinación a la vez.

120 NEXT I3
130 NEXT I2
140 NEXT I1

Cada NEXT es una palanca que mueve cada variable a su siguiente valor.

150 END

Acaba el programa y muestra la futilidad del ejercicio y de la existencia, en general.

Toda esta explicación, incluida la recitación, fue inútil, pues no activé ningún Golem, ni me interesa subirme a un bus, pero fue un ejercicio pedagógico interesante.

¡Concurso fácil!

Si leyó el libro o el capítulo por pura curiosidad, pudo ver que J. Belbo gastó una cantidad no especificada de whisky y sándwiches generando el código para combinar seis caracteres. Como homenaje a este ñoñazo de la semiótica y a sus personajes ofrezco a mis pocos, poquísimos y desocupados, desocupadísimos lectores un premio de whisky (o tinto, o bebida análoga de su elección) y sándwich (o pasabocas sólido o coloidal análogo) y un ratico de charla intrascendente a la persona que primero ponga el código correcto para combinar 6 caracteres en BASIC en la sección de comentarios de esta publicación, usando lo que hay en esta publicación como plantilla o inspiración.
El premio puede entregarse en Bogotá, o donde nos encontremos, la próxma vez que nos veamos.
Nota: El código debe poder correr en el emulador de AppleSoft Basic, el del Apple //, cuyo link está en el texto.

Adenda musical

Hace un tiempo, junto con el Ensamble de Exploración Vocal de los Andes (EEVA) cantamos una obra llamada 'HaShem' (El Nombre) de un compositor colombiano muy chévere que se llama Johann Hassler. En la obra, las vocales y consonantes se combinaban de acuerdo a las reglas que dio Abraham Abulafia para sus ejercicios místicos. Cantar esta obra y hacer estos ejercicios es muy interesante, cuando menos, divertido. Aunque no tuve ninguna epifanía, disfruté de los efectos sicotrópicos de la saturación de CO2 en mi cerebro.

Si tienen la oportunidad, vayan a escuchar esta obra en vivo, o si pueden, sean intérpretes de esta. Johann no solo es buen tipo, sino muy buen compositor.

jueves, febrero 15, 2007

Contar con los dedos

Pido de antemano disculpas por mi ausencia en este espacio por mucho tiempo, pero sólo a los que lo hayan lamentado. Para el resto, celebro el nuevo año con más de un mes de demora y mi regreso a las letras electrónicas públicas (guách, ni que escibiera) con este artículo.

En la tradición 'desocupista' de este weblog, llega uno de los nuevos descubrimientos del agua tibia, que pueden llegar a ser divertidos para los desocupados les gusta reírse de los chistes flojos -sin duda, los mejores- o bien, controvertir su gracia.

Recostado en la cama, esperando una llamada telefónica del médico para que me dijera que era lo que tenía, entreví un comercial en la tele en el que alguien deseaba tener cadena perpetua en lugar de 30 años para tener más tiempo. En las imágenes volátiles que aparecían como fantasías aparecía una de las rayitas que pintan o graban en la pared en grupos de a cinco, con la quinta tachando las cuatro anteriores.

Esto se me quedó grabado en el subconsciente momentáneo.

Olvidé temporalmente la llamada y el comercial y le volví a poner volumen al televisor a ver si daban algo bueno. Como es usual, no había nada bueno y me quedé mirando para arriba, contándome los dedos. Gracias a una breve aparición de mi gato en mi cuarto, y al pensar en que el 8 es el número favorito de cierta persona, me traté de imaginar cómo contaría él, cuyos pulgares no se ven, como en todos los gatos.

Escondí los míos y conté hasta ocho.

Después saqué uno de los pulgares y pensé para qué me podría servir, y la iluminación debida al ocio entre llamadas del médico llegó: "Para ver en que grupo de 'ochos' voy" -dijo el homúnculo de la conciencia. ¿Cómo funciona eso? se preguntarán mis desocupados lectores. Voy a representar los dedos así, siendo el pulgar el dedo uno:

Mano izq. Mano der.
1,2,3,4,5 5,4,3,2,1

Ahora, el uno va a representar un dedo levantado y el cero un dedo plegado. Así se representarían las dos manos con los índices levantados:

Izq. Der.
01000 00010

Quito las comas por pura pereza y dejo el espacio para indicar que lo que está antes del espacio es una mano y lo que está después es la otra.

Bien, vuelvo a lo de los ochos. Contar de uno a ocho sin usar los pulgares es bien fácil:

00000 00000 Cero
00000 00010 Uno
00000 00110 Dos
00000 01110 Tres
etcétera... hasta ocho:
01111 11110 Ocho

Los números del nueve hacia arriba lo representaría así:
10000 00000 Nueve
10000 00010 Diez
10000 00110 Once
etcétera, hasta diecisiete:
11111 11110 Diecisiete

El dieciocho, lo represento así;
10000 00001 Dieciocho
10000 00011 Diecinueve
así, hasta veintiséis:
11111 11111 Veintiséis

No lo podía creer. ¡Uáau, más números de los dedos que tengo y sin romperme la cabeza!

Me embalé y mi siguiente reto fue usar una mano para las unidades y la otra para los grupos de cinco:

00000 00000 Cero
00000 00001 Uno
...
00000 11111 Cinco
00001 00000 Seis
00001 00001 Siete
...
00011 00000 Doce
...
00111 00011 Veinte
00111 00111 Veintiuno
...
11111 11111 Treinta y cinco

Este nuevo sistema me hizo pensar que si la base es menor, el uso de los dedos es más eficiente, así que traté de ser más eficiente, usando los dedos más de una vez. En lugar de acumular, usar cada dedo como una posición binaria móvil. Contando en binario:

00000 00000 Cero
00000 00001 Uno
00000 00010 Dos
00000 00011 Tres
00000 00100 Cuatro
...
00000 01000 Ocho
...
00000 10000 Dieciséis
...
00001 00000 Treinta y dos
...
00010 00000 Sesenta y cuatro
...
11111 11111 Mil veintitrés

Es relativamente fácil, además mover los dedos así es divertido, el pulgar de la mando derecha sube y baja. El único difícil de mover es el anular, creo que Robert Schumann se tiró uno de sus dedos tratando de independizarlo completamente del meñique, pero aún así es divertido.

Bueno, descubrí el agua tibia de nuevo y eso me pone feliz, pero quisiera proponer a los paseantes que posen sus ojos y ratones por acá y les gusten los retos con buena recompensa, que inventen un sistema para contar con los dedos usando mantisa y exponente. Uno en cada mano.

La recompensa es de:
00011 00100 (adivinen)
puntos, libres de impuestos, que se entregarán por este medio.

AVISO IMPORTANTE: SE ACEPTAN CORRECCIONES PARA ESTE ARTICULO, QUE SERAN AÑADIDAS Y SE DARÁ EL CRÉDITO CORRESPONDIENTE