Saturday, July 19, 2014

Ganador del reto de contar palabras


Con una buena participación por parte de los programadores/lectores binarios del sitio unocero, damos por concluido el reto de la programación lúdica que trataba de contar letras, espacios y palabras de un texto. Cabe decir que enfrenté un problema. Los programas eran en su mayoría muy rápidos (un par de segundos en el caso de los ejecutables), mientras que los que usaron Python, por ser un intérprete, fueron extremadamente lentos. Por ende, como el rato originalmente era de velocidad, los intérpretes (a excepción de Java, que casi tiene un desempeño como el de un ejecutable nativo), palidecen frente a código compilado de máquina x86.

Debido a que las diferencias en tiempos entre algunos programas eran demasiado cortos, decidí tomar otro criterio: Qué tanto se acercaban a las cifras originales dada por Microsoft Word. De hecho, comparé el resultado contra el que dio OpenOffice 4.1.0 y fueron exactamente los mismos. Vamos ambos programas toman en cuenta las mismas consideraciones para contar palabras. Así, debido a que los programas corrían muy rápido y las diferencias eran a veces de centésimas de segundos, no era posible discriminar realmente quién había sido el más rápido. Además, se buscaba que el resultado fuese “correcto”.


Los valores que entrega Ms-Word y OpenOffice

Esto en algún sentido fue una sorpresa. La mayoría de los programas entregan resultados diferentes en sus conteos. Las razones son los criterios que cada uno de ellos estableció para definir lo que era una palabra. Por ejemplo, para Word “–Y” son dos palabras. Por eso hay divergencias.

Por otra parte, tuve que descalificar, valga la expresión, a José Gabriel Acosta, que usó una biblioteca de funciones para ayudarse en esta tarea. Le indiqué que eso no se valía, porque entonces todo se resume a que se haga la llamada adecuada sin haber programado realmente el reto. Les dije que podían reescribir su código y que me lo mandara. No recibí nada y tuve que descalificarlo.

El ganador fue Diego Iván García Leyva, (ver foto al lado), de 27 años, Culiacán, Sinaloa. Estudió ingeniería electrónica en el Tecnológico de Culiacán, actualmente desarrolla sistemas biométricos de Coppel. Maneja los proyectos de huella en línea y reconocimiento de rostro.


De acuerdo a la tabla que sigue (si quieren el archivo de Excel, pídanmelo), mostró que se acercó más a los demás en promedio -contra el estándar definido por Word y OpenOffice (que dan los mismos resultados). Sólo falló por 0.08. No me importó si se acercaban “por arriba o por abajo” del resultado correcto, sino el valor absoluto de la diferencia.


Desde luego que el código de todos los que concursaron pueden pedírmelo y les mandaré un enlace para que bajen el archivo comprimido. Escríbanme los interesados a morsa@la-morsa.com. El archivo de texto que se usó contiene unos 5 megabytes. Es la combinación del texto de los Miserables y del Quijote. Aún con 5 Megabytes, repito, algunos programas fueron muy rápidos.

Felicidades a Diego y ya le estaré mandando su premio.

No comments: