Me engancharon a Word Challenge de Facebook, un juego de tipo brain training, que trata de enunciar palabras en base a un conjuto de letras dado, muy al estilo Scabble.

Tras un par de días jugando, conseguí obtener 2.938 puntos en inglés, y 5.912 en castellano. Con algo más de práctica, y un poco de suerte, veo factible llegar a los 8000 puntos, aunque pasar de ahí, es cosa casi imposible.

El brain training trata de entrenar el cerebro poniéndolo a practicar, así que decidí que la mejor manera de entrenarlo, era desarrollar un programa que buscara en un diccionario las palabras que contenían la secuencia de letras dada.

En si, no iba a ser capaz de introducir los resultados dentro del propio juego, el nombre de Solve Word Challenge quedaba algo pretencioso, así que posteriormente lo subtitulé eufemísticamente como Asistente para mejorar la puntuación en Facebook Word Challenge.

Quería una herramienta fácil de utilizar, y rápida de desarrollar, así que me puse manos a la obra con Javascript, hasta que lo tuve solucionado. El código, aunque no muy limpio, funcionaba en menos de 20 minutos. Luego le cargué la lista de 100.000 palabras en castellano de The Word List Project, y ahí vino la primera decepción, Internet Explorer daba un error de memoria insuficiente, mientras que Opera decía que no implementado. Por lo visto el array de 1,1 Mb no les gusta demasiado a los navegadores actuales, algo triste, sobre todo en lo que a mi respecta por Opera.

Como Javascript es muy similar a ActionScript, lo porté rapidamente a AS3, recordando como funcionan los componentes que trae. Ya funcionaba, así que ahora había que añadirle el diccionario. Tras varias peleas y un cuelgue del editor de Flash CS3, al que parece que tampoco le gustan los códigos muy largos, y que obligaba a esperar varias decenas de segundos entre cada copy y paste, lo tuve listo. Al publicar, el código que funcionaba perfectamente con un array de prueba, empezaba a hacer cosas raras, y los elementos del formulario a parpadear.

No me quedaba más opción que PHP. La conversión aunque trivial, debido a diferente sintaxis de variables, y sobre todo a operaciones de cadena no basadas en objetos, fue más larga que en el caso de AS, pero a la primera funcionaba.

Con él funcionando, mi puntuación ha llegado a superar los 28.000 puntos, una cifra que dudo que alguien pueda conseguir naturalmente, y que por otro lado, con algo de hábito en el uso, podría superar los 30.000 facilmente.

Se da la circunstancia de que la base de datos de palabras en el Solve Word Challenge, parece ser más amplia que la del juego, así que no os extrañe si a veces introducís alguna palabra, y el sistema no la da por buena.

Para vuestro deléite lo tenéis disponible en www.javiergutierrezchamorro.com/images/08/08/SolveWordChallenge.php.

Actualizado a domingo 10 de agosto de 2008. 10:52:
He hecho algunos cambios de funcionamiento, en la nueva versión dos, que tenéis disponible sobre los mismos enlaces. Basicamente ahora el diccionario es un archivo externo preprocesado, y comprimido GZ, lo que ahorra espacio, y mejora la velocidad de ejecución.
También he limitado el tamaño del diccionario a palabras de entre 3 y 6 caracteres de longitud, que son las requeridas para el juego, y las he unificado para que estén siempre sin acentos.
Así, de un espacio ocupado por el diccionario de 1,3 Mb, se ha pasado a uno de tan solo 290 Kb, que se queda en 80 Kb tras la compresión.