Misez P'tit, Optimisez - N°34 (Tout à 1 Euro!)

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

jxano
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2362
Enregistré le : 16 févr. 2008 23:34
Localisation : Paris 20ème

Re: Misez P'tit, Optimisez - N°34 (Tout à 1 Euro!)

Message par jxano »

C.Ret a écrit :Par exemple, nous avons calculé le nombre de combinaisons pour obtenir 1€. Mais qu’en est-il du nombre de combinaisons pour 1£ ou 1$ sachant que dans ces monnaies, les pièces de 20c n’existent pas, mais que par-contre, il y a des pièces de 25c et 75c ?
je ne crois pas que les 75 cents existent, je ne sais même plus s'il y a des 50 cents... pour faire un dollar, les États-Uniens qu'ont que les pièces de 1, 5, 10 et 25 cents (hormis la pièce de 1 dollar).

Par contre, pour faire un rouble, on peut ajouter au système qu'on connaît pour l'euro les pièces de de 3 et 15 kopecks.
Programmeur abscons.
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6186
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Misez P'tit, Optimisez - N°34 (Tout à 1 Euro!)

Message par Marge »

Je crois qu'il existe des pièces de 75 pence.
Modifié en dernier par Marge le 11 févr. 2013 19:14, modifié 1 fois.
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
jxano
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2362
Enregistré le : 16 févr. 2008 23:34
Localisation : Paris 20ème

Re: Misez P'tit, Optimisez - N°34 (Tout à 1 Euro!)

Message par jxano »

Quand on ne se fie qu'à sa mémoire, on peut avoir avoir des trous... Donc j'ai sorti la documentation, à savoir le « World Coins », le catalogue général des monnaies du monde, édition 1996.

Pas vu de 75 pence en Grande-Bretagne.

Par contre, je ne me souvenais plus qu'il existe aux États-Unis un « Half Dollar » à l'effigie de Kennedy.

Comme mon catalogue couvre également le 19ème siècle, il y a de quoi se renseigner sur les systèmes monétaires les plus exotiques...
Programmeur abscons.
Avatar du membre
Pocket
Administrateur
Administrateur
Messages : 5949
Enregistré le : 24 mai 2002 16:55
Localisation : Toulouse
Contact :

Re: Misez P'tit, Optimisez - N°34 (Tout à 1 Euro!)

Message par Pocket »

Salut,
jxano a écrit :Par contre, je ne me souvenais plus qu'il existe aux États-Unis un « Half Dollar » à l'effigie de Kennedy.
Pas que, j'en ai 2 ou 3 de ces 'Half Dollar', et je ne me souviens pas de Kennedy sur l'effigie, je vais matter

A+
Pocket, voit tout, sait tout, lit l'avenir dans les entrailles d'une base phpBB ...
Image
jxano
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2362
Enregistré le : 16 févr. 2008 23:34
Localisation : Paris 20ème

Re: Misez P'tit, Optimisez - N°34 (Tout à 1 Euro!)

Message par jxano »

Il y a sans doute des effigies plus récentes ! (Sans compter celles d'avant 1964...)
Programmeur abscons.
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6186
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Misez P'tit, Optimisez - N°34 (Tout à 1 Euro!)

Message par Marge »

jxano a écrit :Quand on ne se fie qu'à sa mémoire, on peut avoir avoir des trous... Donc j'ai sorti la documentation, à savoir le « World Coins », le catalogue général des monnaies du monde, édition 1996.

Pas vu de 75 pence en Grande-Bretagne.

Par contre, je ne me souvenais plus qu'il existe aux États-Unis un « Half Dollar » à l'effigie de Kennedy.

Comme mon catalogue couvre également le 19ème siècle, il y a de quoi se renseigner sur les systèmes monétaires les e neplus exotiques...
Les experts ont raison, j'aurais dû me rappeler que tu l'étais ! Bizarre, je ne sais pas d'où me vient cette image... une pièce du Commonwealth, je crois pourtant.
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3419
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez P'tit, Optimisez - N°34 (Tout à 1 Euro!)

Message par C.Ret »

Ah! Oui, effectivement il ne doit pas y avoir de pièce de 75 !

Mais, contrairement à Marge, je sais d'où viens ma confusion; de cette pièce là :

Image
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
jxano
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2362
Enregistré le : 16 févr. 2008 23:34
Localisation : Paris 20ème

Re: Misez P'tit, Optimisez - N°34 (Tout à 1 Euro!)

Message par jxano »

Marge a écrit :Les experts ont raison, j'aurais dû me rappeler que tu l'étais ! Bizarre, je ne sais pas d'où me vient cette image... une pièce du Commonwealth, je crois pourtant.
Probablement, je me suis dit aussi. Mais les recherches dans le bouquin vont être un peu longues...
Programmeur abscons.
Avatar du membre
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7147
Enregistré le : 31 janv. 2008 14:24
Localisation : Banlieue Paârisienne
Contact :

Re: Misez P'tit, Optimisez - N°34 (Tout à 1 Euro!)

Message par gege »

Bonjour.
Bon, ben voilà je m'en doutais, ça devait arriver :(
On peut résoudre le problème sans exécuter la moindre boucle ni même allumer une calculatrice :(

Donc on part de l'extraordinaire algorithme de dprtl, sur mon fidèle destrier la TI89 :

Code : Tout sélectionner

-----VERSION "BRUTALE"
nbpieces()
Func
Local a,b,c,d,e,f,n
0->n
For a,0,100,100
For b,a,100,50
For c,b,100,20
For d,c,100,10
For e,d,100,5
For f,e,100,2
n+1->n
EndFor
EndFor
EndFor
EndFor
EndFor
EndFor
Return n
EndFunc
On applique la méthode du 51 pour éliminer la boucle des pièces de 2, et on peut aussi éliminer la boucle des euros en s'apercevant que lorsque b vaut 100 on ajoute en fait 1 au compteur, et que cela arrive dans deux cas : (a=0 et b=100) ou (a=100 et b=100).
Le programme devient :

Code : Tout sélectionner

-----VERSION AFFINEE
nbpieces()
Func
Local a,b,c,d,e,f,n
2->n
For b,0,50,50
For c,b,100,20
For d,c,100,10
For e,d,100,5
n+51-(e+mod(e,2))/2->n
EndFor
EndFor
EndFor
EndFor
Return n
EndFunc
En fait on peut éliminer aussi la boucle des pièces de 5 pour une raison... euh en fait d est toujours divisible par 10, donc e va toujours de 5 en 5 et tombe sur 100 à la fin (ok c'est vaseux mais je ne sais pas comment bien l'expliquer). A noter que la divisibilité de d par 10 est importante et que si "plus haut" on avait utilisé par exemple une pièce de 25 ou de 75, ben faut recalculer le truc.
On obtient ceci :

Code : Tout sélectionner

-----VERSION LEVEL 1
nbpieces()
Func
Local b,c,d,n
2->n
For b,0,50,50
For c,b,100,20
For d,c,100,10
n+d^2/20-52*d/5+541->n
EndFor
EndFor
EndFor
Return n
EndFunc
Bon, on peut aussi virer la boucle des pièces de 10 hop :

Code : Tout sélectionner

-----VERSION LEVEL 2
nbpieces()
Func
Local b,c,n
2->n
For b,0,50,50
For c,b,100,20
n+2156-3563/60*c+109/200*c^2-c^3/600->n
EndFor
EndFor
Return n
EndFunc
Et là je fatigue, mais il est clair qu'on peut continuer, cependant la boucle de 20 est plus difficile à condenser parce que la variable b varie par pas de 50, qui n'est pas divisible par 20, donc c peut ou pas atteindre 100 et il faut distinguer deux cas. Bref, c'est mer..que, mais pas techniquement compliqué.

Alors chers zauditeurs, on arrive à quoi ?
Eh bien au fameux "programme à Momo" dont je vous livre la version adaptée au problème :

Code : Tout sélectionner

-----VERSION VAS-Y MOMO !!
nbpieces()
Return 4563
EndFunc
Eh oui, dans tout problème sauf difficulté technique (c'est très fréquent en fait), on peut soit allumer la machine sans réfléchir du tout, soit tout résoudre théoriquement et donner la solution sur papier, ou adopter un moyen terme entre les deux. Il est un peu déprimant le programme à Momo, non ? :(

Je préfère vos solutions !! :D
Sayonara
G.E.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3419
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez P'tit, Optimisez - N°34 (Tout à 1 Euro!)

Message par C.Ret »

Merci gégé,

Tu viens de résumer toute la progression de l'analyse de ce problème de pièce.

Et j'arrive à la même solution optimale que toi:
« 4563 »

Mais en fait, cette dernière ne me plait plus qu'à toi. Je reste fan des premières solutions, celles que j'appèle paramètrique, que ce soit directement dans la structure du programme (cf. dprtl - où il suffit d'ajouter ou modifier une boucle FOR/NEXT pour tenir compte d'autres pièces) ou celle de bernouilli92 qui prend comme argument une liste décrivant la valeur des pièces et la somme à composer.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1602
Enregistré le : 27 oct. 2010 20:46

Re: Misez P'tit, Optimisez - N°34 (Tout à 1 Euro!)

Message par Gilles59 »

Code : Tout sélectionner

<< -> Reste NPiece
  << CASE
        Reste NOT THEN 1 END
        Reste 0 < NPiece 1 < OR THEN 0 END
        Reste NPiece 1 - MPO
        Reste { 100 50 20 10 5 2 1 } NPiece GET - NPiece MPO
        +
      END
    >>
>> 'MPO' STO
100 7 MPO -> 4563

Le seul intérêt de cette version récursive déclinée de la version HP39GII (voir page 2) est de vérifier que le NewRPL fonctionne bien. Ca met quelques minutes sur la HP50G ce qui est extrêmement rapide vu l'inefficacité totale de l'algorithme qui teste _toutes_ les combinaisons possibles. C'est probablement 100 ou 200 fois plus rapide que le RPL standard sur le même hdw et peut-être même plus rapide que la Prime dont le processeur carbure pourtant bien plus vite (je vais tester ;D)

EDIT :
- HP50G NewRPL : 1mn11s, Emulateur HP50G NewRPL W10 : 1,155s. Emulateur Emu48 RPN W10 full speed : 2mn51s/ Real speed : Euh … des heures?
- HPRIME PPL : 3mn39s, Emulateur 4,5s

Etonnant... La HP50g est ici 2,4 fois plus rapide que Emu48 sur W10 et 3 x plus rapide que la Prime. Quand à la HP50G avec le RPL standard probablement plusieurs heures. L''émulateur NewRPL est 148 fois plus rapide que Emu48.

Pour montrer à quel point cette approche est inefficace : MPO est exécuté récursivement 745.663 fois.
Modifié en dernier par Gilles59 le 17 mai 2019 19:12, modifié 1 fois.
Casio FX-502P /602P / 603P / FX180P+ / FX4000P / TI57 / TI66 / TI74 Basicalc / TI95 Procalc / HP12C / HP15C LE / DM41L / HP 30B / HP39GII / HP 48SX USA / 49G / 49g+ / 50G / 50G NewRPL / HP Prime / Oric 1 / Amstrad CPC 6128+ CM14 et MM12 / Alice 32
Avatar du membre
dprtl
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 463
Enregistré le : 27 janv. 2013 00:26
Localisation : Strasbourg
Contact :

Re: Misez P'tit, Optimisez - N°34 (Tout à 1 Euro!)

Message par dprtl »

Avant de réfléchir sur le dernier MPO n°90: Bibi or not Bibi qui vient de sortir, j'ai essayé de relever le défi de zpalm qui réclamait une version TI-57 pour celui-ci. C'est un échec. Il me manque environ 15 pas pour implémenter un algorithme disons "pas trop grugé". Alors, j'ai repris l'exercice sur ma HP-12C, qui ne participe pas très souvent aux MPO :

Image

Il n'y a rien de très révolutionnaire par rapport à ce qui avait été publié précédemment. Mais, en prenant n'importe quel montant en argument (en centimes d'euros), ce programme calcule les valeurs de la suite suivante (il ne faut pas être pressé) :

Code : Tout sélectionner

a(1)=2, a(2)=3, a(3)=3, a(4)=4, a(5)=5, a(6)=6, a(7)=7, a(8)=8, ...,  a(97)=4073, a(98)=4220, a(99)=4367, a(100)=4563
Je m'attendais à la retrouver sur le site de l'OEIS, peut-être avec une formule par récurrence toute prête ? Mais non...
Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1602
Enregistré le : 27 oct. 2010 20:46

Re: Misez P'tit, Optimisez - N°34 (Tout à 1 Euro!)

Message par Gilles59 »

dprtl a écrit : 29 mai 2019 21:23 (…). Alors, j'ai repris l'exercice sur ma HP-12C, qui ne participe pas très souvent aux MPO :
Sympa, Je vais sortir mon HP12 ;D
Ce programme fonctionnerait-il à l'identique sur une HP15C ?
Je vais peut-être essayer mais j'avoue avoie du mal avec les calcs qui n'affichent pas les programmes en "clair"
Casio FX-502P /602P / 603P / FX180P+ / FX4000P / TI57 / TI66 / TI74 Basicalc / TI95 Procalc / HP12C / HP15C LE / DM41L / HP 30B / HP39GII / HP 48SX USA / 49G / 49g+ / 50G / 50G NewRPL / HP Prime / Oric 1 / Amstrad CPC 6128+ CM14 et MM12 / Alice 32
Avatar du membre
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3637
Enregistré le : 06 sept. 2011 14:57
Localisation : Normandie

Re: Misez P'tit, Optimisez - N°34 (Tout à 1 Euro!)

Message par Hobiecat »

Normalement, si ça passe sur la 12C sans utilisation de fonctions financières, ça passe aussi sur la 15. La réciproque n'est souvent pas vraie. :wink:
Répondre

Retourner vers « Tous les Pockets »