Generador de palabras a partir de letras

Aprender programación no es divertido si no empiezas cuanto antes a aplicar tus pocos conocimientos. Lo bueno es encontrar alguna meta, idear algún programita sencillo que te sirva para algo; e ir desarrollando tus conocimientos para la ejecución de dicho programa. De esta manera, el aprendizaje no es un mero proceso de compilación de datos y repetición de ejemplos dados en los tutoriales, sino que se convierte en algo más excitante, más pragmático, con más sentido, más divertido, y diría también que más efectivo, puesto que si andando se aprende a andar, y el método comunicativo se desmarca como el definitivo en la enseñanza de lenguas, así también en la programación informática uno aprende mejor programando, y programar no es programar por programar, programar no es programar para aprender, sino programar para terminar un programita que nos va a servir para algo. Y ese algo, mejor si está relacionado con otra afición.

En mi caso, yo estoy planeando un lenguaje humano que usará una armónica como sustituto de nuestra boca. Los sonidos de este idioma serán evidentemente muy distintos de cualquier lenguaje natural, puesto que la fono-articulación es bien distinta. Sin embargo, los fonemas podrán igualmente  representarse mediante grafemas.

Para automatizar la generación del vocabulario de esta conlang, pensé en la posibilidad de un programa que calculara todas las combinaciones posibles entre un número de letras dadas. Seguramente sea algo que ya existe, pero no iba a perder esta fuente de motivación para programar un poco por mi cuenta.

Aunque claro, más que programar, fue investigar. (E “investigar” = “preguntar a programadores expertos”)

Al final, el programa es muy sencillito. Por lo visto, lo que hace es calcular el producto cartesiano. Aquí está el código en Python:

import itertools
x = input(‘Introduce tus letras: ‘)
y = input(‘Longitud de palabras: ‘)
print([“”.join(prod) for prod in itertools.product(x, repeat=int(y))])

Tenemos que introducir, sin separación de comas ni espacios, el conjunto de letras que vayamos a usar en el idioma. Por ejemplo, si queremos saber cuáles son las posibles combinaciones de tres a partir de cuatro letras; A, E, B y C:

Introduce tus letras: aebc

Longitud de palabras: 3

[‘aaa’, ‘aae’, ‘aab’, ‘aac’, ‘aea’, ‘aee’, ‘aeb’, ‘aec’, ‘aba’, ‘abe’, ‘abb’, ‘abc’, ‘aca’, ‘ace’, ‘acb’, ‘acc’, ‘eaa’, ‘eae’, ‘eab’, ‘eac’, ‘eea’, ‘eee’, ‘eeb’, ‘eec’, ‘eba’, ‘ebe’, ‘ebb’, ‘ebc’, ‘eca’, ‘ece’, ‘ecb’, ‘ecc’, ‘baa’, ‘bae’, ‘bab’, ‘bac’, ‘bea’, ‘bee’, ‘beb’, ‘bec’, ‘bba’, ‘bbe’, ‘bbb’, ‘bbc’, ‘bca’, ‘bce’, ‘bcb’, ‘bcc’, ‘caa’, ‘cae’, ‘cab’, ‘cac’, ‘cea’, ‘cee’, ‘ceb’, ‘cec’, ‘cba’, ‘cbe’, ‘cbb’, ‘cbc’, ‘cca’, ‘cce’, ‘ccb’, ‘ccc’]

El programita, aunque quizá sí me pueda servir a mí, es aún muy rudimentario y habría que hacerle algunos retoques significativos.

Lo primero que hay que solucionar es que las palabras generadas no sean todas de la misma longitud. Es decir, cuando nos pregunta por la longitud de las palabras, mejor que nos pregunte por el máximo de longitud de las palabras, y entonces nos dé en la misma lista todas las combinaciones posibles, desde conjuntos de dos letras hasta del máximo que hayamos establecido.

A partir de ahí, podrían mejorarse otras cosas, como quizá que se le puedan introducir algunas reglas sobre la combinación de letras. Por ejemplo, en el caso anterior, podríamos especificar que B y C no puedan ir juntas.

[PRECAUCIÓN: Quizá mi PC sea obsoleto, pero Python se paralizó y todo se ralentizó cuando, en el ejemplo anterior, puse 8 en lugar de 3 como longitud de las palabras.]

Anuncios