Misez p'tit, Optimisez - N°38 (comptez les 1 2 3 4 5)

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

Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3420
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit, Optimisez - N°38 (comptez les 1 2 3 4 5)

Message par C.Ret »

J'ai mieux avec 152.5 octets seulement !

Code : Tout sélectionner

« -> d
  « IF d 4 < d 6 == OR 
    THEN
      { }
    ELSE
      { d } 1 CON
        1 d 3 - PUTI
              3 PUTI
              2 PUT
        d 3 - 2 PUT
      IF d 5 == THEN
        1 3 PUT
        3 3 PUT
      END
    END
  »
»
En plus, il retourne { } quand il n'y a pas de solution et moins d'une seconde jusqu'à d=1000.
Quand je vous disait que la CASIO fx-602p est lente !
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°38 (comptez les 1 2 3 4 5)

Message par Gilles59 »

C.Ret a écrit : Quand je vous disait que la CASIO fx-602p est lente !
C'est que j'initialise les mémoires à 1 ce dont on peut fort bien se passer ...
y'a aussi de quoi optimiser encore et gagner 7-8 pas et rendre le prog plus lisible ;)

La morale que je retiens de ce MOP, c'est qu'on ne voit pas toujours ce qui devrait sauter au yeux :O


Pour répondre à ta question

n=4 -> ()
n=8 -> (53212111)
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
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5266
Enregistré le : 21 nov. 2012 13:03
Localisation : Ile de France

Re: Misez p'tit, Optimisez - N°38 (comptez les 1 2 3 4 5)

Message par bernouilli92 »

J'ai enfin testé mes deux versions sur une vraie hp 48sx. Je ne tiens pas compte de ma dernière version que je considère comme non correcte car elle ne teste pas la validité de la réponse, elle se contente de donne le nième élément d'une suite. Il se trouve que la solution donnée est bonne mais le programme ne le teste pas.
J'ai édité les messages pour y ajouter l'information.
Par contre je ne sais pas trop comment compter les variables utilisées dans un programme en RPL, car les variables peuvent contenir n'importe quel objet qui peut avoir n'importe quelle taille. Pareil pour l'utilisation de la pile, les objets présents sur la pile peuvent être de différentes nature.

Cela devrait donner :
- proposition 1 de bernouilli92, HP-48SX, A=1990, F=2, T=17, B=249, R=3, bogonote=156
- proposition 2 de bernouilli92, HP-48SX, A=1990, F=2, T=2, B=271, R=4, bogonote=1167
HP, Casio, Sharp, Psion, quelques TI et divers autres
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3420
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit, Optimisez - N°38 (comptez les 1 2 3 4 5)

Message par C.Ret »

Gilles59 a écrit :
C.Ret a écrit : Pour répondre à ta question
n=4 -> ()
n=8 -> (53212111)
Merci Gilles. Finalement, j'ai plus ou moins bien interprété le code pour la fx-602p. C'est vraiment une machine bien sympathique et puissante.

En particulier l'adressage indirect avec accumulation en mémoire n'a rien à envier aux hauts de gammes des autres marques.
dprtl a écrit :[...][/color]- proposition 3 de bernouilli92, HP-48SX, A=1990, F=2, T=1, B=175, R=6, bogonote=2318 (à contrôler, notamment sur la taille des variables et registres)
- proposition 2 de C.Ret, HP-28S, A=1986, F=1, T=1, B=157, R=7, bogonote=5418 (à contrôler)

J'aime bien les Bogo Points, ils me sont très favorables, il me suffit de recopier l'excellent programme de bernouilli92 pour HP48SX de changer un ou deux petits détails (comme les PUT en PUTI) et de simplifier (retirer une clause ELSE) ce qui produit un programme presque identique (et moins bien structuré), et j'obtient une Bogo-note qui fait plus du double.

Vive les sasfeplus et les processeurs monomégahertziques !
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.
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°38 (comptez les 1 2 3 4 5)

Message par dprtl »

bernouilli92 a écrit :Par contre je ne sais pas trop comment compter les variables utilisées dans un programme en RPL, car les variables peuvent contenir n'importe quel objet qui peut avoir n'importe quelle taille. Pareil pour l'utilisation de la pile, les objets présents sur la pile peuvent être de différentes nature.
Mon idée initiale était de compter unitairement les variables, ou les objets dans la pile, quelle que soit leur dimension. Mais je m'aperçois finalement que ça reste assez pénible à mesurer, et probablement pas très significatif. En fin de compte, tout programme est limité par la taille de la RAM de la calculette sur laquelle il tourne. Cela devient critique, et quasi impossible à contourner, pour le "vrai" calcul matriciel, par exemple, mais pas dans ce MPO.
Avatar du membre
Paul Tergeist
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2417
Enregistré le : 15 oct. 2007 15:50
Localisation : 3ème planète après le soleil

Re: Misez p'tit, Optimisez - N°38 (comptez les 1 2 3 4 5)

Message par Paul Tergeist »

Moi ce que j'aime bien dans les bogopoints c'est :
1) le nom est une tuerie
2) la formule pour les calculer est une tuerie aussi
Avatar du membre
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3643
Enregistré le : 06 sept. 2011 14:57
Localisation : Normandie

Re: Misez p'tit, Optimisez - N°38 (comptez les 1 2 3 4 5)

Message par Hobiecat »

En fait, c'est surtout que la bogonote n'apporte pas grand chose sur l'ancien classement "au nombre d'octets"...

En reprenant le classement provisoire sur base "octets", le classement ne change pas énormément ! :mrgreen:
1er - proposition 1 de Gilles59, 67 octets
2e - proposition 2 de C.Ret, 157 octets
3e - proposition 3 de bernouilli92,175 octets
5e - proposition 1 de bernouilli92, 249 octets
4e - proposition 2 de bernouilli92, 271 octets
7e - proposition 1 de C.Ret, 286 octets
6e - proposition 1 d' Okinawok, 480 octets
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3420
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit, Optimisez - N°38 (comptez les 1 2 3 4 5)

Message par C.Ret »

Paul a raison, il faudrait presque créer un MPO pour optimiser et avoir un petit programme pour la calculer ! :D

En tout cas ce que je retiens de ce MPO est que j'ai bien du mal, sans utiliser un ordinateur et une approche par "force brute" à trouver une solution analytique ou à voir l'aspect systèmatique des solutions à ce problème qui pourtant est assez simple à énoncer.

Et que sans l'intervention de Gilles59, je serais encore à faire des boucles et des boucles et des boucles et des boucles et des boucels et des b... pour tenter de trouver une solution.
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.
Avatar du membre
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5266
Enregistré le : 21 nov. 2012 13:03
Localisation : Ile de France

Re: Misez p'tit, Optimisez - N°38 (comptez les 1 2 3 4 5)

Message par bernouilli92 »

Hobiecat a écrit :En fait, c'est surtout que la bogonote n'apporte pas grand chose sur l'ancien classement "au nombre d'octets"...

En reprenant le classement provisoire sur base "octets", le classement ne change pas énormément ! :mrgreen:
1er - proposition 1 de Gilles59, 67 octets
2e - proposition 2 de C.Ret, 157 octets
3e - proposition 3 de bernouilli92,175 octets
5e - proposition 1 de bernouilli92, 249 octets
4e - proposition 2 de bernouilli92, 271 octets
7e - proposition 1 de C.Ret, 286 octets
6e - proposition 1 d' Okinawok, 480 octets
J'aime bien l'idée de la bogonote mais il faudrait l'améliorer un peu pour tenir compte de la loi de moore de manière plus précise.
Par ailleurs, si on ne tient compte que des tailles en octets, les hp 28s et suivants sont désavantagé par rapport à beaucoup de machines car la moindre instruction prend 2.5 octets au lieu de 1 octet. Après il est vrai aussi que le jeu d'instruction est plus évolué et permet plus de choses en moins d'instructions.
HP, Casio, Sharp, Psion, quelques TI et divers autres
Okinawok
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 401
Enregistré le : 12 avr. 2011 15:07

Re: Misez p'tit, Optimisez - N°38 (comptez les 1 2 3 4 5)

Message par Okinawok »

Hobiecat a écrit :En fait, c'est surtout que la bogonote n'apporte pas grand chose sur l'ancien classement "au nombre d'octets"...

En reprenant le classement provisoire sur base "octets", le classement ne change pas énormément ! :mrgreen:
1er - proposition 1 de Gilles59, 67 octets
2e - proposition 2 de C.Ret, 157 octets
3e - proposition 3 de bernouilli92,175 octets
5e - proposition 1 de bernouilli92, 249 octets
4e - proposition 2 de bernouilli92, 271 octets
7e - proposition 1 de C.Ret, 286 octets
6e - proposition 1 d' Okinawok, 480 octets
6 ème ! C'est ma plus belle performance toute catégorie confondue : d'habitude, je suis bon dernier :lol:
Avatar du membre
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5266
Enregistré le : 21 nov. 2012 13:03
Localisation : Ile de France

Re: Misez p'tit, Optimisez - N°38 (comptez les 1 2 3 4 5)

Message par bernouilli92 »

Okinawok a écrit :
Hobiecat a écrit :En fait, c'est surtout que la bogonote n'apporte pas grand chose sur l'ancien classement "au nombre d'octets"...

En reprenant le classement provisoire sur base "octets", le classement ne change pas énormément ! :mrgreen:
1er - proposition 1 de Gilles59, 67 octets
2e - proposition 2 de C.Ret, 157 octets
3e - proposition 3 de bernouilli92,175 octets
5e - proposition 1 de bernouilli92, 249 octets
4e - proposition 2 de bernouilli92, 271 octets
7e - proposition 1 de C.Ret, 286 octets
6e - proposition 1 d' Okinawok, 480 octets
6 ème ! C'est ma plus belle performance toute catégorie confondue : d'habitude, je suis bon dernier :lol:
Grâce à la bogonote !
Mais pas en nombre d'octets :wink:
HP, Casio, Sharp, Psion, quelques TI et divers autres
currybleu
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 22
Enregistré le : 13 févr. 2013 15:43

Re: Misez p'tit, Optimisez - N°38 (comptez les 1 2 3 4 5)

Message par currybleu »

bernouilli92 a écrit :Par contre je ne sais pas trop comment compter les variables utilisées dans un programme en RPL, car les variables peuvent contenir n'importe quel objet qui peut avoir n'importe quelle taille. Pareil pour l'utilisation de la pile, les objets présents sur la pile peuvent être de différentes nature.
J'avais fais il y a quelques années, un programme justement pour mesurer la taille d'un programmes et de ses variables pour 28S. vu le code, il rest valable pour 48/49/50
Bon il a des fleurs un peu partout et donc optimisable, mais le principe est simple:
On met tous les programmes à mesurer dans une liste {} et on lance le programme
Le prog va tout simplement faire une boucle qui:
- mesure la quantité de RAM dispo,
- stocker le programme en mémoire
- mesurer la RAM
- Faire le delta
etc...

ci dessous le code:

Code : Tout sélectionner

«
<< CLLCD DUP
IF TYPE 6 SAME 
THEN 1 ->LIST
ELSE
	IF DUP TYPE 5 <>
	THEN
		IF DUP TYPE 8 SAME
		THEN EVAL
		ELSE KILL
		END
	END
END
"-- Taille des prog --
"
1 DISP DUP SIZE -> list tail
	<< 0 0 1 tail 
	FOR X list X GET
		IFERR DUP ->STR DUP SIZE 1 - 2 SWAP
		SUB "* '" SWAP + "' -> " + SWAP RCL 'programme' STO MEM
		'programme' PURGE MEM SWAP - DUP 4 ROLL + 3 ROLLD ->STR +
		THEN ERRM 3 DISP DROP2
		ELSE ROT DROP 10 CHR + "*** TOTAL : " 3 PICK ->STR + DUP 4 ROLLD + 3 DISP
		END
	NEXT DROP
	>>
>>
'SIZ' STO
!! Attention: remplacer le caractere <> par le caractère "différent"

Utilisation:
{PROG1 PROG2 PROG3} SIZ
Avatar du membre
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5266
Enregistré le : 21 nov. 2012 13:03
Localisation : Ile de France

Re: Misez p'tit, Optimisez - N°38 (comptez les 1 2 3 4 5)

Message par bernouilli92 »

Sur hp48sx et suivantes, il y a directement l'instruction BYTES qui donne la taille d'un octet d'un objet sur pile. Effectivement sur hp28s, il faut recourir à un programme comme le tien.
La question était plutôt de savoir quelle taille de mémoire supplémentaire le programme a besoin pour fonctionner.
Sur les anciennes HP en RPN, chaque fois qu'un registre est utilisé, cela "consomme" 7 octets, de plus la pile a une taille fixe et donc ne consomme pas de mémoire supplémentaire. Mais sur les machines RPL, la pile et les variables peuvent contenir des objets de tailles variables.
HP, Casio, Sharp, Psion, quelques TI et divers autres
Avatar du membre
Paul Tergeist
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2417
Enregistré le : 15 oct. 2007 15:50
Localisation : 3ème planète après le soleil

Re: Misez p'tit, Optimisez - N°38 (comptez les 1 2 3 4 5)

Message par Paul Tergeist »

Sur mon engin la fonction BYTES renvoie une taille erronée,
je dois souvent rajouter quelques centimètres.
:mrgreen:
currybleu
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 22
Enregistré le : 13 févr. 2013 15:43

Re: Misez p'tit, Optimisez - N°38 (comptez les 1 2 3 4 5)

Message par currybleu »

A mon avis la taille mémoire occupée par la pile n'a pas a être prise en compte dans le calcul de la taille d'un programme.seul le programme et autres objets (listes, sous programmes, matrices, etc...) utilisés par le programme doit être comptabilisé.
Par exemple, si je fais un programme du style <<1 1000 for x x next >> ou je rempli la pile des 1000 premiers nombres, le programme a beau remplir la ram, le programme n'en fait pas moins que quelques octects non?
Répondre

Retourner vers « Tous les Pockets »