Sindicador de canales de noticias
Ciudadanos de diferentes zonas de Cataluña manifiestan su inquietud ante la crisis ferroviaria
Mossos intensifica los patrullajes en instalaciones ferroviarias para evitar vandalismo en trenes
Retiran los últimos restos del Alvia de las vías tras una semana del siniestro en Adamuz
Adif ejecuta un plan de intervenciones "urgentes" para restablecer el servicio de Rodalies
La instalación de las puertas de andén para la automatización de la L6 de Metro empezará este martes
Junta exige al Gobierno una actuación "clara e inmediata" para conocer las causas del accidente
Oriol Junqueras: "Esta situación es fruto de décadas de desinversión por parte del Estado"
Adif suspende la circulación de trenes entre los municipios sevillanos de Arahal y Marchena por riesgo de caída de muro
Rolling Stock: EuCo Rail responds to high demand for component maintenance
Development » SpotBugs #2883 (stable)
Development » Deprecations #2415 (stable)
Development » Packages #2929 (stable)
Development » Ignored Test Scan #3116 (stable)
Development » SpotBugs #2882 (stable)
Una galería que explica decenas de formatos de archivo, para desentrañar cómo están codificados
La Galería de formatos para Kaitai Struct es una explicación de las especificaciones de un montón de formatos binarios («tipos de archivo» sería otra forma de llamarlos) y cómo entender qué contienen los archivos, byte a byte, de forma relativamente sencilla.
De hecho aunque Kaitai Struct es un lenguaje para describir formatos de datos, no es necesario utilizarlo para aprovechar este estupendo recurso. La galería contiene las especificaciones de decenas de formatos, explicados a nivel de bytes y binario, y también a modo de guía visual. Así que nada de tener que ponerse a picar y compilar código sin saber cómo funciona todo.
En la lista de formatos, agrupadas por categorías, hay archivos de imagen, bases de datos (incluyendo el legendario .DBF de dBase, que se usaba en 1982, literalmente el «año de Naranjito»), ejecutables, sistemas de ficheros, protocolos de red, contenedores multimedia, etcétera. Estas especificaciones están escritas describiendo campo a campo cómo está organizado el formato en binario: sus encabezados, tipos de datos, longitud de registros y repeticiones. Están las tipografías TTF o de las imágenes BMP y los frames de las redes Ethernet.
Esta galería es, en cierto modo, es como la piedra de Rosetta de los formatos. Lo mejor es que además de usarlo en Kaitai también se incluye código para analizar los archivos en diferentes lenguajes, entre ellos: C++ y C#, Go, Java, Perl, PHP, Python, Ruby y Rust. Así que quien necesite usar alguno de estos formatos por razones prácticas, o incluso históricas, lo tiene fácil, sin tener que escribir todo el código desde cero.
Quince formas distintas de generar laberintos y verlas en acción
Es curioso echar un vistazo a Algoritmos para Laberintos, donde se muestran 15 formas de generar laberintos*. Aunque no todos son visualmente agraciados ni «complicados» desde el punto de vista de su resolución, explica todas las formas más o menos habituales de construirlos con un ordenador. Son algoritmos tanto clásicos como modernos, de código abierto y con animaciones paso a paso.
En total hay 15 algoritmos diferentes, cada uno con comportamientos y resultados claramente reconocibles. Se ofrecen en tres tamaños a partir de una retícula de 5×5, 15×15 y 25×25. Mis favoritos son el Recursive Backtracking y el Hunt and Kill. El resto me parece que generan caminos demasiado sencillos, que se acortan en uno o dos pasos y son casi triviales de resolver.
El código fuente completo está disponible públicamente en GitHub (CoffeeScript Mazes) y acompaña al libro Mazes for Programmers, que enseña los métodos desde un punto de vista práctico y que seguramente gustará a quienes les apasionen estos temas.
Entre los algoritmos incluidos hay enfoques deterministas, aleatorios e híbridos. Aparecen clásicos como Árbol binario y Sidewinder, métodos de caminatas aleatorias con garantías de uniformidad estadística como Aldous-Broder y Wilson y y técnicas recursivas. Hay combinaciones prácticas como el algoritmo de Houston, que mezcla el Aldous-Broder y el Wilson para ganar velocidad a costa de perder uniformidad.
_____
* Hay una diferencia sutil entre maze y labyrinth en inglés, palabras para las cuales solo usamos «laberinto» en castellano. Un labyrinth tiene una sola ruta sin bifurcaciones y no es difícil de seguir; solo tiene un entrada y una salida y pueden tener ciertas connotaciones «espirituales». En cambio los maze son más enrevesados, con muchas opciones y rutas que tomar, puede estar diseñado para ser más o menos difícil, quizá tenga varias entradas y salidas y son los que se utilizan en los experimentos científicos.
Relacionado:
- Un generador de laberintos y cuatro algoritmos para resolverlos
- El algoritmo de Wilson para generar laberintos
- Un algoritmo para crear laberintos «interesantes»
- Algoritmos de resolución de laberintos en acción
- Algoritmos para resolver laberintos
- Generador de laberintos
- Algorithms, de Erickson: más de 470 páginas sobre fundamentos e ideas
- Los algoritmos recursivos de vuelta atrás (backtracking)





