Le nombre de configurations à tester est assez petit alors on peut se permettre de rechercher toutes les solutions. Le nombre de configurations correspond au nombre de façons de piocher trois boules dans une urne qui en possède 101. il y en a donc : (101*100*99)/(3*2*1) = 5'999'400.
Le programme suivant (en Python 3.2) vous donne les deux solutions de ce problème.
# -*- coding: utf-8 -*-
import sys

numbersAsWords = (
    "zero", "un",  "deux", "trois",  "quatre", "cinq",  "six", "sept",
    "huit",  "neuf",  "dix",  "onze", "douze",  "treize",  "quatorze",
    "quinze",  "seize", "dix-sept",  "dix-huit", "dix-neuf",  "vingt",
    "vingt-et-un",   "vingt-deux",    "vingt-trois",   "vingt-quatre",
    "vingt-cinq",     "vingt-six",     "vingt-sept",     "vingt-huit",
    "vingt-neuf",     "trente",     "trente-et-un",     "trente-deux",
    "trente-trois",   "trente-quatre",  "trente-cinq",   "trente-six",
    "trente-sept",    "trente-huit",     "trente-neuf",    "quarante",
    "quarante-et-un",        "quarante-deux",        "quarante-trois",
    "quarante-quatre",         "quarante-cinq",        "quarante-six",
    "quarante-sept",  "quarante-huit",  "quarante-neuf",  "cinquante",
    "cinquante-et-un",       "cinquante-deux",      "cinquante-trois",
    "cinquante-quatre",       "cinquante-cinq",       "cinquante-six",
    "cinquante-sept", "cinquante-huit",  "cinquante-neuf", "soixante",
    "soixante-et-un",        "soixante-deux",        "soixante-trois",
    "soixante-quatre",         "soixante-cinq",        "soixante-six",
    "soixante-sept", "soixante-huit", "soixante-neuf", "soixante-dix",
    "soixante-et-onze",      "soixante-douze",      "soixante-treize",
    "soixante-quatorze",      "soixante-quinze",     "soixante-seize",
    "soixante-dix-sept",   "soixante-dix-huit",   "soixante-dix-neuf",
    "quatre-vingts",      "quatre-vingt-un",      "quatre-vingt-deux",
    "quatre-vingt-trois",  "quatre-vingt-quatre", "quatre-vingt-cinq",
    "quatre-vingt-six",    "quatre-vingt-sept",   "quatre-vingt-huit",
    "quatre-vingt-neuf",    "quatre-vingt-dix",   "quatre-vingt-onze",
    "quatre-vingt-douze",                       "quatre-vingt-treize",
    "quatre-vingt-quatorze",                    "quatre-vingt-quinze",
    "quatre-vingt-seize",                     "quatre-vingt-dix-sept",
    "quatre-vingt-dix-huit", "quatre-vingt-dix-neuf", "cent")

numbersAttributes = []
for word in numbersAsWords:
    """
    Pour chaque nombre en lettres, on  compte le nombre de voyelles et
    le nombre de consonnes.
    """
    nbC = 0
    nbV = 0
    for letter in word:
        if letter in "aeiouy":
            nbV += 1
        elif letter not in " -":
            nbC += 1
    numbersAttributes.append( (nbV, nbC) )

for x in range(99):
    xv, xc = numbersAttributes[x]    
    for y in range(x + 1, 100):
        yv, yc = numbersAttributes[y]
        if xv == yv: continue
        if xc == yc: continue
        if xc != yv: continue
        for z in range(y + 1, 101):
            zv, zc = numbersAttributes[z]
            if zv == xv: continue
            if zc == xc: continue
            if zv == yv: continue
            if zc == yc: continue
            if zv + zc != yc: continue
            if zc != xv: continue
            print("Solution : ", x, y, z)
            print(", ".join( [numbersAsWords[i] for i in (x,y,z)] ))

Pages : 1 2
Joute 86
18 février 2013
Sommaire général