Des casse-tête numériques à l'inverseur de Plouffe

Des casse-tête numériques à l'inverseur de Plouffe

18 décembre 2017 · 6 min. de lecture
posts

J’utilise parfois l’Inverse Symbolic Calculator disponible ici  et à chaque fois il me sidère. Comment fait-il pour retrouver l’expression mathématique correspondant à presque n’importe quelle valeur décimale, par exemple que ma date de naissance 1963.1225 est presque égale à $1000.\sum\limits\limits_{n=1}^{\infty}{\frac{1}{3^n.(3n^2+18n-1)}} $ ???

Ce n’est qu’en consultant le  code source  Maple   de l’auteur original, Simon Plouffe , que j’ai réalisé que ce problème est proche de casse-têtes déjà abordés sur ce blog:

et d’autres comme :

Du casse-tête à la génération de nombres

Lorsqu’on aborde ces problèmes comme des casse-tête, on a tendance à chercher une formule pour chaque nombre, par exemple pour le jeu de l’année 2018:

  • chercher une formule donnant 1 avec 2,0,1 et 8 : grâce au 1 et le 0, on trouve la formule “dans l’ordre” 2*0+1^8 immédiatement
  • puis (2+0)*1^8 = 2
  • et 2+0+1^8 = 3
  • pour 4 il faut apparemment se résoudre à utiliser les chiffres dans le désordre : 1/2 * 8 + 0 = 4
  • puis -2 -1 + 0 + 8 = 5
  • -2+0*1+8 = 6, dans l’ordre à nouveau
  • -2+0+1+8 = 7
  • ..et ainsi de suite facilement jusqu’à 28-10 = 18

Mais pour 19, on rame … Existe-t’il une solution ? Ou faut-il ajouter des opérations supplémentaires comme la factorielle ? Le seul moyen de répondre à ces questions serait d’essayer toutes les combinaisons possibles, mais ça en fait beaucoup, dont la plupart fourniront des résultats différents de 19. Alors autant en profiter pour résoudre le problème “à l’envers”, en générant tous les nombres possibles puis en cherchant dans les résultats si on a une solution pour 1,2,3, .. 19, … et ainsi de suite.

Un Python dévorant de l’AST défèque du LaTeX

Mon premier code python vite fait mal fait pour résoudre le jeu de l’année 2012  utilisait déjà quelques bonnes idées:

  • une classe pour stocker les formules générées, indexées par le nombre généré
  • une classe descendante pour générer les résultats par applications des fonctions et opérateurs monadiques
  • une autre classe pour les opérateurs dyadiques habituels . +, - *, /, ^
  • la fonction itertools.permutations   pour générer toutes les combinaisons possibles des chiffres de base
\[expand title="toutes les combinaisons de deux fonctions de pi" tag="h4"\]

$0 = \sin\left(\pi\right) \\\\ 1.1066376096750703e-08 = \sqrt{\sin\left(\pi\right)} \\\\ 0.0016220420328425947 = -\log_{10}\left(\tanh\left(\pi\right)\right) \\\\ 0.0053883069999880245 = -\log_2\left(\tanh\left(\pi\right)\right) \\\\ 0.08061223884710403 = -\cos\left(\log_2\left(\pi\right)\right) \\\\ 0.08637409704956384 = \arccos\left(\tanh\left(\pi\right)\right) \\\\ 0.10127515998198242 = \log_{10}\left(\arctan\left(\pi\right)\right) \\\\ 0.20029354112337366 = -\cos\left(\sqrt{\pi}\right) \\\\ 0.2178775601946847 = \log_{10}\left(\log_2\left(\pi\right)\right) \\\\ 0.2384115869826587 = -\cos\left(\cosh^{-1}\left(\pi\right)\right) \\\\ 0.2485749363470669 = \log_{10}\left(\sqrt{\pi}\right) \\\\ 0.25804463696400576 = \log_{10}\left(\cosh^{-1}\left(\pi\right)\right) \\\\ 0.2700486505921227 = \log_{10}\left(\sinh^{-1}\left(\pi\right)\right) \\\\ 0.28738870981373654 = -\cos\left(\sinh^{-1}\left(\pi\right)\right) \\\\ 0.303314471053353 = \cos\left(\arctan\left(\pi\right)\right) \\\\ 0.30351266745964006 = -\log_{10}\left(\log_{10}\left(\pi\right)\right) \\\\ 0.3364287992583597 = \log_2\left(\arctan\left(\pi\right)\right) \\\\ 0.3594631941472303 = \log_{10}\left(\Gamma\left(\pi\right)\right) \\\\ 0.40890356614612045 = -\cos\left(e^{\pi}\right) \\\\ 0.45987273106154514 = \tanh\left(\log_{10}\left(\pi\right)\right) \\\\ 0.4613649087218807 = \arctan\left(\log_{10}\left(\pi\right)\right) \\\\ 0.47692237272813737 = \sin\left(\log_{10}\left(\pi\right)\right) \\\\ 0.47866114168179535 = \sinh^{-1}\left(\log_{10}\left(\pi\right)\right) \\\\ 0.49714987269413385 = \log_{10}\left(\pi\right) \\\\ 0.5178835400771429 = \sinh\left(\log_{10}\left(\pi\right)\right) \\\\ 0.5203108468523976 = \arcsin\left(\log_{10}\left(\pi\right)\right) \\\\ 0.5253829059023629 = \cos\left(\sinh\left(\pi\right)\right) \\\\ 0.5403023058681398 = \cos\left(-\cos\left(\pi\right)\right) \\\\ 0.5426074954923101 = \tan\left(\log_{10}\left(\pi\right)\right) \\\\ 0.5434354838975394 = \cos\left(\tanh\left(\pi\right)\right) \\\\ 0.5455131633547174 = \tanh^{-1}\left(\log_{10}\left(\pi\right)\right) \\\\ 0.5616502280096894 = \cos\left(\cosh\left(\pi\right)\right) \\\\ 0.6573082860590352 = -\cos\left(\Gamma\left(\pi\right)\right) \\\\ 0.7050885566325225 = \sqrt{\log_{10}\left(\pi\right)} \\\\ 0.7097529597429991 = \cosh^{-1}\left(\arctan\left(\pi\right)\right) \\\\ 0.7237735884562356 = \log_2\left(\log_2\left(\pi\right)\right) \\\\ 0.7536217997630731 = \sin\left(\Gamma\left(\pi\right)\right) \\\\ 0.7600240731703095 = \tanh\left(\tanh\left(\pi\right)\right) \\\\ 0.7615941559557649 = \tanh\left(-\cos\left(\pi\right)\right) \\\\ 0.7835307228365398 = \arctan\left(\tanh\left(\pi\right)\right) \\\\ 0.7853981633974483 = \arctan\left(-\cos\left(\pi\right)\right) \\\\ 0.8257480647361592 = \log_2\left(\sqrt{\pi}\right) \\\\ 0.8273747768554852 = -\sin\left(\cosh\left(\pi\right)\right) \\\\ 0.839450936529972 = \sin\left(\tanh\left(\pi\right)\right) \\\\ 0.8414709848078965 = \sin\left(-\cos\left(\pi\right)\right) \\\\ 0.8508659131646942 = -\sin\left(\sinh\left(\pi\right)\right) \\\\ 0.8517867999026187 = \tanh\left(\arctan\left(\pi\right)\right) \\\\ 0.8572057292657407 = \log_2\left(\cosh^{-1}\left(\pi\right)\right) \\\\ 0.8787350885719889 = \sinh^{-1}\left(\tanh\left(\pi\right)\right) \\\\ 0.8789454194609376 = \cos\left(\log_{10}\left(\pi\right)\right) \\\\ 0.8813735870195429 = \sinh^{-1}\left(-\cos\left(\pi\right)\right) \\\\ 0.8970821993883932 = \log_2\left(\sinh^{-1}\left(\pi\right)\right) \\\\ 0.9003440704475638 = \Gamma\left(\log_2\left(\pi\right)\right) \\\\ 0.900952887864509 = \arctan\left(\arctan\left(\pi\right)\right) \\\\ 0.9038887978916361 = \Gamma\left(\arctan\left(\pi\right)\right) \\\\ 0.9125775986692777 = -\sin\left(e^{\pi}\right) \\\\ 0.9243607675016626 = \Gamma\left(\sqrt{\pi}\right) \\\\ 0.9290626405396939 = \tanh\left(\log_2\left(\pi\right)\right) \\\\ 0.934493916651473 = \Gamma\left(\cosh^{-1}\left(\pi\right)\right) \\\\ 0.9438777473631609 = \tanh\left(\sqrt{\pi}\right) \\\\ 0.9479867173951659 = \tanh\left(\cosh^{-1}\left(\pi\right)\right) \\\\ 0.9494040798538225 = \Gamma\left(\sinh^{-1}\left(\pi\right)\right) \\\\ 0.9528905139886873 = \sin\left(\arctan\left(\pi\right)\right) \\\\ 0.9528905139886874 = \tanh\left(\sinh^{-1}\left(\pi\right)\right) \\\\ 0.9578140369986211 = \sin\left(\sinh^{-1}\left(\pi\right)\right) \\\\ 0.9711642060910246 = \sin\left(\cosh^{-1}\left(\pi\right)\right) \\\\ 0.9796193833710564 = \tanh\left(\Gamma\left(\pi\right)\right) \\\\ 0.9797359324758174 = \sin\left(\sqrt{\pi}\right) \\\\ 0.99627207622075 = \tanh\left(\pi\right) \\\\ 0.9967455377116355 = \sin\left(\log_2\left(\pi\right)\right) \\\\ 0.9981342976878161 = \sqrt{\tanh\left(\pi\right)} \\\\ 0.9999999998138246 = \tanh\left(\sinh\left(\pi\right)\right) \\\\ 0.9999999998292396 = \tanh\left(\cosh\left(\pi\right)\right) \\\\ 1 = -\cos\left(\pi\right) \\\\ 1.002165608530718 = \Gamma\left(\tanh\left(\pi\right)\right) \\\\ 1.0082472571883836 = -\log_2\left(\log_{10}\left(\pi\right)\right) \\\\ 1.0263340602019209 = \arctan\left(\log_2\left(\pi\right)\right) \\\\ 1.050485479942499 = \arccos\left(\log_{10}\left(\pi\right)\right) \\\\ 1.0554569703792611 = \sinh^{-1}\left(\arctan\left(\pi\right)\right) \\\\ 1.0571243112754385 = \arctan\left(\sqrt{\pi}\right) \\\\ 1.0625345798933474 = \log_{10}\left(\sinh\left(\pi\right)\right) \\\\ 1.06415662192619 = \log_{10}\left(\cosh\left(\pi\right)\right) \\\\ 1.0664030390131651 = \arctan\left(\cosh^{-1}\left(\pi\right)\right) \\\\ 1.0780106889436865 = \arctan\left(\sinh^{-1}\left(\pi\right)\right) \\\\ 1.0871525572995602 = \cosh^{-1}\left(\log_2\left(\pi\right)\right) \\\\ 1.123666879319183 = \sqrt{\arctan\left(\pi\right)} \\\\ 1.1261453552196687 = \cosh\left(\log_{10}\left(\pi\right)\right) \\\\ 1.1465271558974195 = -\tan\left(\Gamma\left(\pi\right)\right) \\\\ 1.158412524612224 = \Gamma\left(\Gamma\left(\pi\right)\right) \\\\ 1.1587588521091652 = \arctan\left(\Gamma\left(\pi\right)\right) \\\\ 1.1694568594670662 = \sinh\left(\tanh\left(\pi\right)\right) \\\\ 1.1742984407142925 = \cosh^{-1}\left(\sqrt{\pi}\right) \\\\ 1.1752011936438014 = \sinh\left(-\cos\left(\pi\right)\right) \\\\ 1.194110883715635 = \log_2\left(\Gamma\left(\pi\right)\right) \\\\ 1.2005766322266866 = \cosh^{-1}\left(\cosh^{-1}\left(\pi\right)\right) \\\\ 1.2335303390478385 = \cosh^{-1}\left(\sinh^{-1}\left(\pi\right)\right) \\\\ 1.2626272556789115 = \arctan\left(\pi\right) \\\\ 1.2759642703421383 = \sinh^{-1}\left(\log_2\left(\pi\right)\right) \\\\ 1.2851054935188468 = \sqrt{\log_2\left(\pi\right)} \\\\ 1.3313353638003897 = \sqrt{\sqrt{\pi}} \\\\ 1.3369844095223622 = \sinh^{-1}\left(\sqrt{\pi}\right) \\\\ 1.3459295198712498 = \sqrt{\cosh^{-1}\left(\pi\right)} \\\\ 1.3560247354141104 = \sinh^{-1}\left(\cosh^{-1}\left(\pi\right)\right) \\\\ 1.3643763538418414 = \log_{10}\left(e^{\pi}\right) \\\\ 1.364659570483001 = \sqrt{\sinh^{-1}\left(\pi\right)} \\\\ 1.3803000710956943 = \sinh^{-1}\left(\sinh^{-1}\left(\pi\right)\right) \\\\ 1.4692507675331985 = \cosh^{-1}\left(\Gamma\left(\pi\right)\right) \\\\ 1.4731139338934116 = -\tan\left(\cosh\left(\pi\right)\right) \\\\ 1.4844222297453324 = \arctan\left(\sinh\left(\pi\right)\right) \\\\ 1.4844222297453329 = \arcsin\left(\tanh\left(\pi\right)\right) \\\\ 1.4847426355638642 = \arctan\left(\cosh\left(\pi\right)\right) \\\\ 1.5126261254322009 = \sqrt{\Gamma\left(\pi\right)} \\\\ 1.5276092782701145 = \arctan\left(e^{\pi}\right) \\\\ 1.5387102866214204 = \cosh\left(\tanh\left(\pi\right)\right) \\\\ 1.5430806348152437 = \cosh\left(-\cos\left(\pi\right)\right) \\\\ 1.5447113068682945 = \tan\left(\tanh\left(\pi\right)\right) \\\\ 1.5574077246549023 = \tan\left(-\cos\left(\pi\right)\right) \\\\ 1.565498441080122 = \sinh^{-1}\left(\Gamma\left(\pi\right)\right) \\\\ 1.5707963267948966 = \arccos\left(\sin\left(\pi\right)\right) \\\\ 1.619515792397743 = -\tan\left(\sinh\left(\pi\right)\right) \\\\ 1.6258930378825622 = \sinh\left(\arctan\left(\pi\right)\right) \\\\ 1.6440288952968114 = e^{\log_{10}\left(\pi\right)} \\\\ 1.6514961294723187 = \log_2\left(\pi\right) \\\\ 1.7724538509055159 = \sqrt{\pi} \\\\ 1.7824366004923267 = \Gamma\left(\log_{10}\left(\pi\right)\right) \\\\ 1.811526272460853 = \cosh^{-1}\left(\pi\right) \\\\ 1.8622957433108482 = \sinh^{-1}\left(\pi\right) \\\\ 1.9088028108306492 = \cosh\left(\arctan\left(\pi\right)\right) \\\\ 2.2317672777233026 = \tan\left(e^{\pi}\right) \\\\ 2.288037795340032 = \Gamma\left(\pi\right) \\\\ 2.5115065909006944 = \sinh\left(\log_2\left(\pi\right)\right) \\\\ 2.7032693828284353 = \cosh\left(\log_2\left(\pi\right)\right) \\\\ 2.7081671460884866 = e^{\tanh\left(\pi\right)} \\\\ 2.718281828459045 = e^{-\cos\left(\pi\right)} \\\\ 2.857680860275251 = \sinh\left(\sqrt{\pi}\right) \\\\ 2.9781881070693563 = \sinh\left(\cosh^{-1}\left(\pi\right)\right) \\\\ 3.027596389742777 = \cosh\left(\sqrt{\pi}\right) \\\\ 3.1378437356780546 = \cosh^{-1}\left(\sinh\left(\pi\right)\right) \\\\ 3.141592653589792 = \tan\left(\arctan\left(\pi\right)\right) \\\\ 3.1415926535897927 = \cosh\left(\cosh^{-1}\left(\pi\right)\right) \\\\ 3.141592653589793 = \pi \\\\ 3.141592653589798 = \tanh^{-1}\left(\tanh\left(\pi\right)\right) \\\\ 3.145313671595097 = \sinh^{-1}\left(\cosh\left(\pi\right)\right) \\\\ 3.296908309475615 = \cosh\left(\sinh^{-1}\left(\pi\right)\right) \\\\ 3.3328172064219332 = -\tan\left(\sinh^{-1}\left(\pi\right)\right) \\\\ 3.398343619656162 = \sqrt{\sinh\left(\pi\right)} \\\\ 3.4046957684235926 = \sqrt{\cosh\left(\pi\right)} \\\\ 3.5296634727370515 = \log_2\left(\sinh\left(\pi\right)\right) \\\\ 3.5346958487132114 = e^{\arctan\left(\pi\right)} \\\\ 3.5350517797370395 = \log_2\left(\cosh\left(\pi\right)\right) \\\\ 3.8342726461888614 = \cosh^{-1}\left(e^{\pi}\right) \\\\ 3.8352063682330924 = \sinh^{-1}\left(e^{\pi}\right) \\\\ 4.0734773774299144 = -\tan\left(\cosh^{-1}\left(\pi\right)\right) \\\\ 4.532360141827194 = \log_2\left(e^{\pi}\right) \\\\ 4.810477380965351 = \sqrt{e^{\pi}} \\\\ 4.877057334015103 = \sinh\left(\Gamma\left(\pi\right)\right) \\\\ 4.891500379796746 = -\tan\left(\sqrt{\pi}\right) \\\\ 4.97852269647036 = \cosh\left(\Gamma\left(\pi\right)\right) \\\\ 5.21477597372913 = e^{\log_2\left(\pi\right)} \\\\ 5.885277250018028 = e^{\sqrt{\pi}} \\\\ 6.119780760659149 = e^{\cosh^{-1}\left(\pi\right)} \\\\ 6.438500963065408 = e^{\sinh^{-1}\left(\pi\right)} \\\\ 9.855580030485463 = e^{\Gamma\left(\pi\right)} \\\\ 11.548739357257746 = \sinh\left(\pi\right) \\\\ 11.591953275521519 = \cosh\left(\pi\right) \\\\ 12.364692408582613 = -\tan\left(\log_2\left(\pi\right)\right) \\\\ 15.91198914827845 = -\log_{10}\left(\sin\left(\pi\right)\right) \\\\ 23.140692632779267 = e^{\pi} \\\\ 52.85848379720901 = -\log_2\left(\sin\left(\pi\right)\right) \\\\ 51823.14673489771 = \sinh\left(\sinh\left(\pi\right)\right) \\\\ 51823.14674454591 = \cosh\left(\sinh\left(\pi\right)\right) \\\\ 54111.72095476127 = \sinh\left(\cosh\left(\pi\right)\right) \\\\ 54111.72096400142 = \cosh\left(\cosh\left(\pi\right)\right) \\\\ 103646.29347944363 = e^{\sinh\left(\pi\right)} \\\\ 108223.44191876269 = e^{\cosh\left(\pi\right)} \\\\ 13376324.257428396 = \Gamma\left(\sinh\left(\pi\right)\right) \\\\ 14841077.907790806 = \Gamma\left(\cosh\left(\pi\right)\right) \\\\ 5608479311.233809 = \cosh\left(e^{\pi}\right) \\\\ 11216958622.467619 = e^{e^{\pi}} \\\\ 8165619676597684 = \Gamma\left(\sin\left(\pi\right)\right) \\\\ 1742626626902657859584 = \Gamma\left(e^{\pi}\right) $

\[/expand\]

http://villemin.gerard.free.fr/Wwwgvmm/Nombre/NbCycliq.htm

la version “portable” est ul

http://www.plouffe.fr/simon/constants/

 

https://www.johndcook.com/blog/2013/04/30/recognizing-numbers/

la fonction nsimplify de SymPy  

 

http://www2.stetson.edu/~efriedma/mathmagic/0800.html

Dr. Goulu
Auteurs
Dr. Goulu (il/lui)
Ingénieur à la retraite, toujours curieux et voyageur
EPFL MS Informatique 1988, PhD automatique 1994, eMBA Management of Technology
comments powered by Disqus