Showing posts with label concursos de programación. Show all posts
Showing posts with label concursos de programación. Show all posts

Friday, June 05, 2020

Reto lúdico: procesadores de palabras y diccionarios



Hoy en día prácticamente todas las aplicaciones usan un diccionario de palabras, el cual funciona en tiempo real, marcando (muchas veces subrayando en rojo o pintando con algún color específico) las palabras que de acuerdo a cómo se escriben las palabras, están mal escritas. Esto lo usan muchos procesadores de palabras que añaden esta capacidad para hacer más valioso su software y ayudar al usuario a escribir con mayor corrección.

Hay que decir que los idiomas humanos muchas veces son más complicados para corregir que simplemente hacer una búsqueda en un diccionario a ver si existe una palabra o no. Hay giros idiomáticos, hay anglicismos que muchas veces no se encuentran en los diccionarios, amén de que hay palabras que tienen que ver con el contexto en el que se escriben. Pongamos un ejemplo: la palabra "solo" se escribe sin acento si es de soledad. Si es adverbio, entonces se le pone la tilde en la primera sílaba. Así, "estoy solo" está bien escrito, pero "estoy sólo" no lo está. Y sí, sé que la Rel Academia de la Lengua Española estaba quitando estos acentos diacríticos. Sin embargo, mientras no se decida cómo quedará la cosa, yo seguiré con la regla antigua.

Los elementos de una buena corrección ortográfica

En 1988 hice la maestría en Inteligencia Artificial. Mi proyecto era un corrector ortográfico inteligente. Después de analizar a detalle la problemática, llegué a la conclusión que, para tener un corrector razonablemente bueno, se requería lo siguiente:

  • Ser capaz de usar reglas ortográficas: Hay más de doscientas reglas en el español. Por ejemplo, "En una palabra, después de una n va una v, después de una m va una b". Así, "enbiar" está mal escrito y "homvre" también está mal. Si usamos las reglas, podemos olvidarnos en algunos casos de consultar las palabras en el diccionario.
  • Ser capaz de usar un diccionario con miles de palabras: Mientras más palabras se tengan en un diccionario, la corrección puede ser mejor.
  • Ser capaz de usar diccionarios personalizados: Muchas palabras no están en los diccionarios, por ejemplo, aquellas que usan términos científicos o un lenguaje especializado. Sería pues conveniente poder agregar esta funcionalidad de tener (o crear) diccionarios especializados.
  • Ser capaz de usar otras tecnologías para buscar errores, como patrones equivocados de letras: En muchas ocasiones los usuarios cambian la letras de orden y estoi hace que la palabra esté mal escrita. Si podemos detectar esto, la corrección puede hacerse sin necesidad de un diccionario.
  • Ser capaz de usar de un diccionario de verbos ya conjugados: Curiosamente, los diccionarios normalmente traen los verbos en infinitivo pero no vienen conjugados. La conjugación es un proceso mecánico y por ende, bien podría añadirse a las capacidades del corrector. Cada verbo tiene, en general unas 50 conjugaciones y hay unos 10 mil verbos. Esto haría posible tener un diccionario -sólo de verbos (¿notaron la tilde?)- de 500 mil palabras.


Tres tipos de corrección: interactiva, por lotes y rápida

Normalmente los procesadores de palabras corrigen mientras el usuario está escribiendo un texto. Esto es relativamente ágil para el usuario pues puede detectar errores de inmediato. Sin embargo, hay otros escenarios. Supongamos que nos mandan un texto de muchas cuartillas. Pues bien, sería recomendable ejecutar el corrector ortográfico de manera tal que se haga automáticamente mientras hago otra cosa. Cuando termine, que guarde un reporte con las correcciones que hay que hacer en un archivo que pueda consultar. Una tercera opción es hacer una "corrección rápida", usando para ello una lista de palabras más frecuentemente usadas en el español. Estas pueden encontrarse aquí.

Con esto dicho, va el reto: hágase un editor de textos (puede ser del tipo bloc de notas, es decir, sin necesidad de tipos y tamaños diferentes de letras), que corrija un texto usando estas posibilidades, mientras más, mejor. Es decir, mientras más características puedan usarse (de las descritas), será un mejor candidato a ganar el premio del reto lúdico.

Más de uno preguntará: ¿Y de dónde saco el diccionario de palabras a usar? Buscando en el oráculo de Internet, encontré este sitio, que Giusseppe Domínguez tecleó las 91 mil palabras del diccionario de la RAE y las puso en un archivo de texto, el cual puede descargarse de este enlace. El autor de semejante esfuerzo nos da algunas estadísticas sobre las palabras:


  • Palabras en a.txt = 11135
  • Palabras en b.txt = 3861
  • Palabras en c.txt = 12697
  • Palabras en d.txt = 5880
  • Palabras en e.txt = 7332
  • Palabras en f.txt = 2966
  • Palabras en g.txt = 3000
  • Palabras en h.txt = 2215
  • Palabras en i.txt = 3308
  • Palabras en j.txt = 982
  • Palabras en k.txt = 117
  • Palabras en l.txt = 2531
  • Palabras en m.txt = 5598
  • Palabras en n.txt = 1351
  • Palabras en ñ.txt = 82
  • Palabras en o.txt = 1468
  • Palabras en p.txt = 7951
  • Palabras en q.txt = 521
  • Palabras en r.txt = 4603
  • Palabras en s.txt = 4713
  • Palabras en t.txt = 4980
  • Palabras en u.txt = 500
  • Palabras en v.txt = 2031
  • Palabras en w.txt = 28
  • Palabras en x.txt = 48
  • Palabras en y.txt = 267
  • Palabras en z.txt = 774


Palabras en total = 90939

Con esto todo está en la mesa. ¡A programar!

El ganador (si es de la Ciudad de México), se hará acreedor a una taza con el logotipo de la Morsa. Si es de otro país o de provincia, le mandaremos un USB de al menos 16 GB.



Cabe señalar que este concurso busca simplemente alentar el trabajo de la programación y mostrar que puede ser lúdica. Es un concurso de buena fe. Si hay, por ejemplo, dos o más respuestas satisfactorias, ganará quien la haya mandado primero.

El ganador cede su código fuente a la comunidad. Los que estén interesados deberán mandar sus programas a morsa@la-morsa.com. Quien resulte ganador deberá entregar el código fuente para compartirlo con la comunidad.

Digamos que la idea es promover la creación de software y además, hacer que ésta sea de código abierto. Si el autor decide no poner su código accesible, perderá su premio.



Saturday, June 21, 2014

Programación lúdica: La escondida riqueza del juego del gato


Todos jugamos alguna vez al gato. Hallamos pronto que no era un juego difícil de dominar. Vamos, incluso probablemente dedujimos que después de la primera jugada en el centro, si el rival no tira en las esquinas pierde irremediablemente. Uno olvida rápidamente este tipo de juegos, pues no representa ningún reto. Pero en realidad, sí puede serlo. Por ejemplo, a los alumnos en los primeros años de las carreras que tienen que ver con programación, bien puede ser una tarea a programar. Ahí coinciden algunas ideas interesantes, por ejemplo, la valoración de las posiciones a partir del algoritmo minimax, el cual se usa incluso en la valoración de las posiciones de ajedrez.

Hace unos días estaba yo en el trafico capitalino, atorado a la altura de Polanco, y pensaba en la inmortalidad del cangrejo y en cuántas posibles posiciones se pueden tener en el juego del gato, es decir, ¿cuántas posiciones del gato se pueden dar desde la primera jugada hasta que el juego termina? Pensaba que en realidad requiero conocer la cuarta parte de todas las configuraciones (o posiciones posibles), pues finalmente el gato tiene una simetría de la cual se puede sacar ventaja.

Asi pues, lanzo el siguiente reto a los lectores/programadores: Hágase un programa que genere todas las posibles configuraciones del gato, desde el inicio hasta el final. Guárdese cada posición en un archivo de texto. Por ejemplo, quien escriba un programa de esta naturaleza debería entregarme un texto aproximadamente como éste:

bbb
bxb
bbb

obb
bxb
bbb

obb
bxb
xbb
 
en donde "b" es una casilla vacía. Desde luego, las otras dos letras son "o" y "x".

Se piden solamente las configuraciones o posiciones legales. No se valen cosas como ésta:

xxx
bbb
bbb
por ejemplo.

¿El premio? Una taza con el logotipo de la Morsa a la mejor solución. Esto solamente aplica a los programadores que vivan en el DF (mandar a provincia o a otros países una taza es estúpidamente costoso). En caso de que los concursantes sean de otros países o de la provincia mexicana, el premio será una memoria USB de al menos 16 GBytes. Y sí, sé que no son los grandes premios pero mientras no tengamos patrocinadores, esto es lo que hay.

Evidentemente quien gane será anunciado en unocero y hasta tendrá sus quince minutos de fama.

Cabe señalar que este concurso busca simplemente alentar el trabajo de la programación y mostrar que puede ser lúdica. Es un concurso de buena fe. Si hay, por ejemplo, dos o más respuestas satisfactorias, ganará quien la haya mandado primero. Así que "en sus marcas, listos, ¡fuego!"