Volume d’une pizza: un cas généralisable ?
Peut-être connaissez-vous le dessin montrant que le calcul du volume d’une pizza est équivalent à son nom (http://jaytest.posterous.com/solve-for-pizza) ?
pi.z.z.a = π.z².a
(avecz
étant le rayon eta
la hauteur)
Si cela fonctionne avec le mot pizza, peut-être cela fonctionne-t-il avec d’autres mots? Voilà la question que vous ne vous êtes jamais posé et dont cet article va s’empresser de répondre.
Contraintes
Il faut que le mot comporte :
- le terme « pi » ;
- strictement deux fois une autre lettre que p ou i et qu’elles soient consécutives ;
- une cinquième lettre, différente de p, de i et de la lettre en double.
Par exemple, les mots suivants ne sont pas valides : « abcpi » (pas de lettre en double), « pizzas » (trop long), « pizaz » (non consécutifs), « pizzz » et « zpizz » (lettre triple).
Outils
Il faut une liste de mots du dictionnaire, par exemple /usr/share/dict/french
et un peu de code pour faire le traitement.
Le script python écrit pour la circonstance :
#! /usr/bin/env python # -*- encoding: utf-8 -*- import codecs import re def main(): print(filtrer_mots(mots_avec_pi())) def mots_avec_pi(): with codecs.open("/usr/share/dict/french", "r", "utf-8") as f: return [mot[:-1] for mot in f.readlines() if "pi" in mot] def filtrer_mots(mots): return [mot for mot in mots if a_la_bonne_longueur(mot) and a_seulement_deux_caracteres_consecutifs(mot)] def a_la_bonne_longueur(mot): return len(mot) == len("pi" + "rr" + "h") def a_seulement_deux_caracteres_consecutifs(mot): doublons = re.compile(r".*(.).*\1") try: group = doublons.match(mot).group(1) except AttributeError: return False else: return not est_dans_pi(mot, group) and \ est_consecutif(mot, group) and \ a_deux_occurences(mot, group) def est_dans_pi(mot, caractere): return caractere in "pi" def est_consecutif(mot, caractere): return caractere * 2 in mot def a_deux_occurences(mot, character): return mot.count(character) == 2 if __name__ == "__main__": main()
Conclusion
On obtient quatre résultats : « pilla », « pille », « pillé », « pizza ». À part pizza, pas facile de faire une représentation graphique. 😦
L’équation reste valide même si les deux lettres représentant le rayon ne se suivent pas. Si on supprime cette contrainte, la liste est plus longue mais pas vraiment meilleure. Elle inclut de nouveaux termes : « épicé », « épiée », « épiés », « épilé », « expie », « piégé », « piété » et « tapit ».
Il existe donc des mots avec les mêmes caractéristiques sans qu’on puisse les utiliser pour faire le même trait d’humour. C’est vraiment pas drôle !
C’est le style de projet qui fait aimer la programmation. En plus, ça parle de pizza … 😛