pedroreina.net

Analizador aritmético exhaustivo
Este programa encuentra la solución más aproximada y con menos operaciones de cualquier problema propuesto en el programa de televisión Cifras y Letras. Además, permite experimentar con problemas más complicados que los que se proponen en televisión.
Requerimientos

El sistema ha sido desarrollado y probado en sistemas GNU/Linux, pero los componentes utilizados son muy básicos y deberían funcionar correctamente en cualquier otro sistema que los admita.

La versión escrita en Python ha sido comprobada en Python 2.7 y varias versiones de Python 3. Solo se apoya en tres módulos estándar del lenguaje.

La versión escrita en C ha sido compilada con varias versiones de gcc, pero está escrita de un modo genérico y debía poder ser compilada con cualquier compilador de C, no necesariamente muy moderno.

Descarga
anaritex-20240428.zip
Ejemplos

Estos ejemplos están realizados en un ordenador equipado con un procesador Intel Core i5-4690K que funciona a 3.5 GHz con un sistema operativo Debian GNU/Linux 7 de 32 bits.

Una resolución de un problema común en la televisión realizada por la versión en Python:

ejemplo1.png

Una resolución de un problema más complicado realizada por la versión en Python:

ejemplo2.png

La resolución del primer problema realizada por la versión en C:

ejemplo3.png

La resolución del segundo problema realizada por la versión en C:

ejemplo4.png

Licencia
Este programa es software libre con licencia GPL v2.
Explicaciones

En 1992 escribí mi primer programa en C, anarit, el Analizador aritmético que era capaz de resolver cualquier problema propuesto en el programa de Televisión Española Cifras y Letras, entonces presentado en La2 por Elisenda Roca. Las restricciones que dificultaron su desarrollo fueron varias: era mi primer programa en C, el ordenador que usaba tenía un procesador Intel 386 a 20 MHz y quería resolver cada problema en un máximo de 45 segundos, el tiempo otorgado a los concursantes en televisión.

Acabé por conseguirlo y, con el tiempo, preparé una página web y un programa para Android basándome en aquel código original para que quien quisiera lo usara; incluso publiqué el código. Para mí, el problema estaba resuelto y no le dediqué más tiempo.

Pero en 2024 Televisión Española lanzó una nueva versión del programa, esta vez presentado por Aitor Albizúa, y volví a ver algún programa. Comparaba lo que sucedía en la televisión con las respuestas de mi programa y constaté, una vez más, que mi programa en algunos problemas daba respuestas correctas pero muy enrrevesadas. Así que recuperé el interés en el desarrollo informático.

Me plantee que habían pasado ya 32 años desde mi primera versión y que en ese tiempo habían cambiado la informática y yo mismo: los ordenadores son mucho más rápidos y yo espero haber aprendido algo. Tenía muy claro que podía escribir un programa que comprobara todas las posibles operaciones, ya que el programa de 1992 ya lo hacía en un segundo en los ordenadores desde hacía al menos quince años cuando el problema no tenía solución exacta. Eso invitaba a quedarse con la solución que utilizara el menor número de operaciones posible, eso era sencillo. Pero me pregunté dos cosas: ¿qué tal funcionaría un programa así en Python (que genera ejecutables mucho más lentos que C)? y ¿se podrían resover en un tiempo razonable problemas con más de seis números de partida?

Aprovechado la expresividad de Python, en un par de ratos tuve una versión correcta del programa que, efectivamente, tardaba unos pocos segundos en resolver los problemas de tamaño televisión. Pero se iba a minutos si el problema era más largo. No utilizaba ninguno de los atajos que se me ocurrieron en 1992, pero eso era parte del desafío para el procesador, resolver el problema a fuerza bruta. El comportamiento de la versión en Python invitaba a compararla con un posible equivalente en C.

Para afrontar la versión en C decidí utilizar gestión dinámica de memoria. El programa de 1992 está orientado a la velocidad, pero ahora quería probar dos cosas: copiar el algoritmo usado en Python en C y, para ello, gestionar yo mismo la memoria, algo que Python hace automáticamente. Una vez terminada la versión en C, la diferencia de velocidad entre las dos versiones es más que patente.

Diferencias técnicas entre las versiones en C de 1992 y de 2024:

Posibilidades para seguir
Mejor visto con cualquier navegador HTML 4.01 válido CSS válido