Saturday, June 28, 2014

Reto de la programación lúdica: silabeo de un texto


Cuando fuimos a la primaria, quiero suponer que fue ahí, se nos enseñó a silabear un texto, es decir, separar en sílabas las palabras. Esto se hacía con mucha frecuencia en las publicaciones pero cuando la computadora llegó finalmente a la cotidianidad, nos encontramos con que los procesadores de palabras, la mayoría de origen estadounidense, no silabeaban, vamos, no separaban una palabra en sílabas por si no cabía en una línea, sino que en ese caso, toda la palabra se bajaba a la siguiente línea.  Programas como InDesign -de Adobe- tiene la opción de silabeo para no ajustar las líneas con espacios de más o separando las letras unos puntitos aquí y otros allá para poder justificar una línea completa.

El silabeo es pues quizás una especie de arte perdido. ¿Cómo se silabea una palabra? He aquí las reglas elementales:

1. Cuando una consonante está entre vocales se une a la vocal que la sigue.
* Ejemplo: a-ni-llo, mo-ne-da
2. Cuando hay dos consonantes entre vocales, la primera se une a la vocal precedente y la segunda, a la siguiente.
* Ejemplos: al-to, ar-tis-ta
3. De tres consonantes entre vocales, las dos primeras se unen a la vocal que las antecede y l aotra, a la que sigue.
* Ejemplos: ins-tar, abs-ten-ción, pers-pi-caz
* Excepciones: cuando hay grupos inseparables de consonantes: in-glés, am-pliar
4. Cuando hay cuatro consonantes entre vocales, entonces, las dos primeras se unen a la vocal anterior y las otras dos a la que sigue.
* Ejemplos: ins-truir, trans-gre-sión
5. Las consonantes forman grupos inseparables cuando se encuentran las letras “l” o “r” junto con alguna de las letras “b”, “c”, “d”, “f”, “g”, “p” o “t”.
* Ejemplos: a-brir, a-gra-da-ble, de-plo-ra-ble
6. Cuando dos vocales forman un diptongo, éstas no se separan al silabear.
* Ejemplos: ai (baile); au (pausa); ei (peine, ley); eu (feudo); ia (viaje); ie (pieza); io (odio); iu (ciudad); oi (oigo, hoy); ou (bou), ua(agua); ue (vuelta); ui (juicio); uo (arduo).
* La h colocada entre dos vocales que pueden formar diptongo no impide su formación: ahi-ja-do, ahu-yen-tar, prohi-bi-do, rehu-sar
7. Cuando dos vocales forman un adiptongo (hiato), éstas se separan al silabear.
* Ejemplos: po-e-ta, ma-re-o, a-ho-go, o-ír, ra-íz, ju-dí-o

Pues bien, el reto de esta semana de la programación lúdica  es silabear el siguiente texto (Prólogo “El Principito” de Saint Exupery), haciendo que el texto entre en una caja que contiene N líneas, con líneas de 40, 60 ó 75 caracteres por línea.

Prólogo “El Principito” de Saint Exupery

Pido perdón a los niños por haber dedicado este libro a una persona mayor.
Tengo una seria excusa: esta persona mayor es el mejor amigo que tengo en el mundo. Pero tengo otra excusa: esta persona mayor es capaz de comprenderlo todo, incluso los libros para niños.

Tengo una tercera excusa todavía: esta persona mayor vive en Francia, donde pasa hambre y frío. Tiene, por consiguiente, una gran necesidad de ser consolada. Si no fueran suficientes todas esas razones, quiero entonces dedicar este libro al niño que fue hace tiempo esta persona mayor. Todas las personas mayores antes han sido niños. (Pero pocas de ellas lo recuerdan).

Corrijo, por consiguiente, mi dedicatoria:

A LEÓN WERTH, cuando era un niño.

Por ejemplo, si tuviese una caja de 20 caracteres pondría:

Pido perdón a los ni-
ños por haber dedica-
do este libro a una 
persona mayor.
Tengo una seria excu-
sa: esta persona ma-
yor es el mejor ami-
go que tengo en el 
mundo. 
 
etcétera...

Así, el programa debe poderse generalizar a cualquier cantidad de columnas que se me ocurra (digamos de 10 a 80).

Este programa, probablemente puedan encontrarlo en la red. No se trata pues de copiarlo de algún sitio. Si descubro una copia o si tengo dudas, me tomo la libertad de preguntarle al autor directamente cómo hizo, para garantizar así que la solución fue escrita y no copiada por el autor del programa. Juguemos pues limpiamente y aprendamos todos de estos retos.

¿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 8 GBytes y se les enviará por correo certificado. Y sí, sé que no son los grandes premios pero mientras no tengamos patrocinadores, esto es lo que hay.

Evidentemente quien gane será anunciado aquí y hasta tendrá sus quince minutos de fama. Sus programas me los pueden mandar a morsa@la-morsa.com y pueden escribirse en cualquier lenguaje. Es importante señalar que hay que mandar el código fuente, el ejecutable (si procede) y el archivo de resultados pedido. Igualmente, se pide una explicación breve de la estrategia usada. Código documentado tiene más posibilidades de ser considerado el ganador.

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. Es decir, se promueve el código abierto.

Referencias:

Buenas Tareas
Reglas silabeo

No comments: