Gostaria de tirar, mais por desencargo de consciência, uma dúvida sobre os requisitos do enunciado. A implementação mais simples do enunciado seria uma em que a ordem do verso é sorteada (1/3 de chance para cada um dos três casos) e, depois, as palavras são sorteadas de acordo com as regras de não-repetição e rima. O problema é que caso não haja rima disponível para uma dada palavra do verso anterior ambas as regras (não-repetição e rima) podem ser violadas, pois o programa simplesmente irá pegar a última palavra sorteada. Para listas pequenas de palavras, como as que um usuário teria paciência para digitar sem CTRL+C/CTRL+V, essa distorção causa uma diferença bem significativa no poema gerado. Desse modo, devemos:
- Mudar a ordem da frase para tentar encontrar uma rima se os sorteios falharem (o que potencialmente faria com que os casos de inversão não fossem mais equiprováveis);
- Refazer o sorteio deixando a regra da rima de lado se não houver rima para evitar repetições ou
- Simplesmente não nos preocuparmos com esses problemas (o que, dado o contorcionismo de código necessário para implementar as outras duas opções, seria bastante tranqulizador...)
Obrigado desde já,
Daniel David