El programador en los tiempos del kilobyte
Hoy he empezado a leer el libro Coders at Work, que por cierto recomiendo a los que les guste cotillear en la vida de los programadores famosetes. A unos les va Salsa Rosa y otros leemos estos libros, cosas de ser un friki. El libro es una colección de entrevistas a programadores más o menos conocidos, uno de ellos es Jamie Zawinsky, un tío al que yo no conocía de nada, pero que por lo visto viene del mundo de Lisp, curró en el desarrollo de Netscape, y [salsa rosa=on] tuvo algún que otro rifirrafe con Stallman.[salsa rosa=off]
La cosa es que Zawinsky dice una cosa en la entrevista que me dejó pensando: «eingh… ¿cómo es eso?» No les voy a decir qué fué lo que dijo Zawinsky porque prefiero que lleguéis vosotros mismos a la respuesta. Así que lo dejo en plan concurso. Ahí va…
Imaginemos la típica lista doblemente enlazada, donde cada elemento tiene un puntero al elemento anterior y al siguiente, llamémosles «previous» y «next», y tenemos además los punteros «head» y «tail» que apuntan el primero y al último elemento respectivamente. Suponiendo que siempre recorreremos la lista partiendo de «head» o de «tail», o sea, nunca necesitaremos recorrer la lista empezando por un elemento intermedio. ¿Qué podemos hacer para eliminar uno de los punteros «previous» o «next» de la estructura, pero conservando la posibilidad de recorrer la lista en las dos direcciones?.
En estos tiempos de gigabytes ya no hace falta hacer guarradas para ahorrarnos unos bytes, pero el truco no deja ser curioso.
Al ganador un ejemplar gratuito (en PDF 😛 ) de Coders at Work