« Mathématiques avec Python et Ruby/Freudenthal sous Ruby » : différence entre les versions

Contenu supprimé Contenu ajouté
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 17 :
Il y a de nombreuses méthodes pour y arriver, et ''Ruby'' est en quelque sorte un langage "multiparadigme" où chacun peut utiliser sa propre logique (épistémique ou non) pour aborder le problème.
 
==Digression arithmétique==
 
Si on avait confié un [[w:Nombre premier|nombre premier]] à Polly, elle n'aurait pas avoué son impuissance lors de sa première affirmation. Bien que ce ne soit nullement nécessaire pour résoudre ce problème, ''Ruby'' sait depuis la version 1.9 manipuler des nombres premiers. Avec
Ligne 33 :
on décompose ''n'' en facteurs premiers.
 
==Les produits à partir des sommes==
 
Plutôt que de manipuler des couples d'entiers ''x'' et ''y'' possibles, on va, comme dans [[Mathématiques_avec_Python_et_Ruby/Freudenthal_en_Python|la version Python]], manipuler l'ensemble des produits possibles. Donc on aura besoin de l'outil permettant, à partir d'une somme ''s'' donnée à Sam, d'obtenir la liste ''prod(s)'' des produits donnés à Polly qui correspondent aux mêmes ''x'' et ''y'':
Ligne 51 :
#Quand on a fini, on transforme ''t'' en ensemble, en enlevant les doublons.
 
==Première affirmation==
 
L'affirmation apporte une information: Le produit donné à Polly peut s'obtenir de plusieurs manières, sinon Polly connaîtrait les facteurs. Pour exploiter cette information, on va commencer par fabriquer l'énorme liste des produits possibles, puis ne garder que ceux qui apparaissent au moins deux fois dans la liste:
Ligne 68 :
Ah oui! Il y en a beaucoup qui restent!
 
==Deuxième affirmation==
 
Si Sam sait que Polly ne sait pas, c'est parce que quelle que soit la décomposition en somme d'entiers de celui qu'on lui a dicté, le produit correspondant est dans la liste précédente. Sinon elle eût pu savoir qui sont ''x'' et ''y'', pour ce que Sam en sait! Sam ne va donc garder que les sommes n pour lesquelles la liste prod(n) calculée avec la fonction ci-dessus ne contient que des éléments de la liste ''polly'', donc si leur intersection est égale à ''prod(n)'' (en effet <math>A \subset B \Leftrightarrow A \cap B =A</math> dans [[w:Algèbre de Boole (structure)|l'algèbre de Boole]] des ensembles):
Ligne 88 :
On sait ce que Sam sait, mais Sam dit "Ça me suffit pas encore!", et nous aussi!
 
==Troisième affirmation==
 
Si Polly sait maintenant quels sont ''x'' et ''y'', c'est que parmi les sommes ci-dessus, il n'y a pas que des doublons (produits communs à plusieurs sommes). Il y a un produit propre à une des sommes de Sam ci-dessus. Pour en savoir plus, Polly va constituer pour chacun des 10 nombres ''s'' ci-dessus, la liste de ses produits ''prod(s)'', puis chercher tous les nombres communs à au moins deux de ces 10 listes (les doublons). ''Ruby'' peut en faire de même, mais après avoir aplati le tableau des ''prod(s)'' (qui est un tableau à deux dimensions), et en plaçant dans la liste des doublons, tous les nombres qui apparaissent plus d'une fois dans le tableau des produits:
Ligne 115 :
|}
 
==Quatrième affirmation==
 
Puisque Sam sait aussi sa somme, on sait que sa somme est 17 et le produit de Polly, 52:
Ligne 124 :
</source>
 
==À la recherche des x et y perdus==
 
Maintenant qu'on connaît la somme et le produit de ''x'' et ''y'', il reste à déterminer ceux-ci, ce qui peut se faire en résolvant l'équation du second degré <math>x^2-17x+52=0</math> ou par une double boucle: