2.2.07

Perl

Root empuja la puerta de cristal y entra, mirando rápidamente a todas partes. Sus ojos se encuentran con los míos, sonríe, se acerca hacia mi mesa y se sienta. Sin decir nada, saca un paquete de tabaco del bolsillo de su chaqueta y enciende un cigarrillo. El humo sube lentamente hasta los conductos de ventilación del techo. Si el protagonista está allí arriba espiando, al menos se tendrá que tragar la nicotina.

Root es un blanco, probablemente de un sesenta y tantos, quizá setenta y tantos, aunque podría defenderse la idea de cincuenta y tantos y ochenta y tantos. En cualquier caso, muy vigoroso. Viste una vieja chaqueta gris, como casi todos los profesores mayores, por la que asoma un medallón colgando de una cadena de plata. En la mano lleva un crucifijo al final de un rosario de grandes cuentas de ambar, como casi nadie en la universidad. También lleva alzacuellos, lo que probablemente explique lo del crucifijo. Y un libro en la mano, pero eso no es significativo en este lugar.

Cuando Shannon publicó en 1948 su artículo A mathematical theory of communication en el BLTJ, estaba dando una medida numérica a lo que es significativo y lo que no. Un suceso aislado poco probable resulta más significativo que uno probable, es decir, contiene más información. Dualmente, en una codificación óptima que aprovechara al máximo la capacidad del lenguaje, necesitaría más bits para representarse. "Llevar un libro en la mano" en la universidad es un suceso tan probable que no debería llevar, digamos, más de dos o tres bits de la descripción del individuo conocido el contexto (para calcular el número exacto de bits necesitaríamos tener un modelo probabilístico detallado de las distintas variables aleatorias que intervienen en la descripción de una persona; sin embargo, a pesar de ser un trabajo sumente interesante, nadie hasta ahora ha parecido dispuesto a gastar el tiempo y dinero de sus proyectos de investigación en esto). "Llevar un alzacuellos" es, sin embargo, lo suficientemente poco probable como para que le asignemos quince o veinte bits, más o menos al mismo nivel que "llevar una camiseta oficial de la selección jamaicana de bobsleigh".

Root abre el libro que lleva en la mano y me muestra una de sus páginas:



#!/usr/bin/perl -s
$f = $d ? -1 : 1; $D = pack('C*',33..86); $p = shift; $p =~ y/a-z/A-Z/;
$p =~ s/[A-Z]/$k=ord($&)-64,&e/eg; $k = 0;
while(<>) { y/a-z/A-Z/; y/A-Z//dc; $o .= $_; }
if (!$d) { $o.='X' while length($o)%5; }
$o =~ s/./chr((ord($&)-13+$f*&e)%26+65)/eg;
$o =~ s/X*$// if $d;
$o =~ s/.{5}/$& /g;
print "$o\n";
sub v {
$v=ord(substr($D,$_[0]))-32;
$v>53?53:$v;
}
sub e {
$D =~ s/(.*)U$/U$1/;
$D =~ s/U(.)/$1U/;
$D =~ s/(.*)V$/V$1/; $D =~ s/V(.)/$1V/;
$D =~ s/(.*)V$/V$1/; $D =~ s/V(.)/$1V/;
$D =~ s/(.*)([UV].*[UV])(.*)/$3$2$1/;
$c=&v(53);
$D =~ s/(.{$c})(.*)(.)/$2$1$3/;
if ($k) { $D =~ s/(.{$k})(.*)(.)/$2$1$3/; return; }
$c=&v(&v(0));
$c>52?&e:$c;
}

Difiere un poco de mi propia implementación, pero parece correcto. Root me mira, inquisitivo. Yo llevo la mirada al libro, lo cierro y leo el título:

"Criptonomicón. Volumen II".

~o~

@book{criptonomicon,
author = "Neal Stephenson",
title = "Criptonomicón",
publisher = "Ediciones B, S.A.",
year="2002",
note="traducción de Pedro Jorge Romero"
}

5 comentarios:

kykoche dijo...

Amigo Hairanakh, me voy obligado a discrepar. Quizás en una facultad de letras podría aceptar tu razonamiento, pero en una escuela de ciencias que una persona tenga un libro en la mano es un evento mucho más significativo que, por ejemplo, si llevara un tercio de cerveza y, por lo tanto, debiera ser codificado con mayor número de bits.

Salvando la localización, el razonamiento ha sido brillante como siempre.

un abrazo

Gummy dijo...

Cada día estás peor.

ChebaX dijo...

Creo que los acontecimientos sucedidos en las últimas semanas te están afectando demasiado, tío.

¡No dejes que se te pire tanto! :P

Hairanakh dijo...

¡Si es una simple reseña de un libro!

Morgan, "el bicho" dijo...

Y yo creía que era el único que escribía "piradasdeolla", reseña del blog de Ktulu.

Un abrazo.

P.D.: Leí este post hace tiempo, pero estaba inmerso en código Java, con lo que mi cabeza dio 3 vueltas de campana...