Misez p'tit, Optimisez - N°39 (Nombres de Keith)

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
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3626
Enregistré le : 06 sept. 2011 14:57
Localisation : Normandie

Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)

Message par Hobiecat »

babaorhum a écrit :Et comme j'ai programmé les 3 machines à la suite, je classe aussi le PC-1500 premier en terme de facilité d'emploi !!! (mon ordre est : PC-1500 ; FX-880P et son écran à 2 lignes ; HP-75C et son clavier trop rigide pour taper vite ... et l'écran un peu "jaune" reste assez peu lisible en luminosité moyenne). Mais ceci est subjectif !!!
Il n'y a pas de mal à être subjectif, on l'a tous constaté avec nos machines : on en a des plus rapides, avec un écran mieux défini ou plus lisible, un clavier qui a un meilleur toucher, etc..., pourtant on revient toujours à sa machine de prédilection, qui n'est pas forcément la meilleure en caractéristiques techniques, mais dont la valeur d'usage est idéale : c'est purement subjectif... et c'est tant mieux ! :wink:
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°39 (Nombres de Keith)

Message par Paul Tergeist »

+1
Modifié en dernier par Paul Tergeist le 25 févr. 2013 15:06, modifié 1 fois.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)

Message par C.Ret »

Très juste, les Benchs passent souvent à côté du point principal; l'ergonomie d'utilisation et l'adéquation entre l'utilisateur et la machine.

A la rigueur, l'ergonomie pourrait être prise en compte en comptant le nombre de touches et en quantifiant les déplacements des doigts au-dessus du clavier.

Par contre, pour le filling et l'adéquation, c'est une autre paires de manches, bien plus subjectif et dépent tellement des préfèrences et de l'histoire de chaque utilisateur ...

Par exemple, les HP48 et HP50 sont des RPL bien plus puissantes que mon viel HP-28S. Pourtant, il reste mon outil de prédilection. J'ai trop de mal à me faire aux claviers surchargés et aux multiples touches préfixes. Le clavier double et simple de la 28 me permet de taper programmes et formules sans constamment chercher s'il faut un préfixe f ou g , flèche droite ou gauche ou un ou deux appuis sur la touche alpha, etc...

Pareil pour le SHARP PC-1211, j'utilise trop rarement ma Ti-74 BASICAL à cause du clavier mais surtout car on ne peut pas méler utilisation calculatrice et programmes BASIC. Ce que le PC-1211 bien qu'infiniment plus lent et moins puissant fait à merveille...

C'est ce qui m'avait fait remarquer la HP-39gii, la possibilité d'exécuter des APPS ou des programmes personnels qui viennent modifier et transformer des variables globales typées dont on dispose en permanence pour les calculs manuels et donc l'utilisation quotidienne.
babaorhum a écrit :Quel coquin ce C.ret !!!
... mais le précédent MPO nous avait mis sur la piste de "l'autre façon de voir les choses" !!
On se doutait un peu quand même vu les perfs annoncées sur 28S ...
Oui, et en plus j'ai volontairement écrit un énoncé qui décortique la définition et donne la façon de faire "bourrin" afin d'induire un maximum les lecteurs vers une approche "mécanique".
on a fait tous a peu près la même chose dans la version "calcul bourrin".
En fait, il n'y a pas pour ces Nombres de Keith d'approche analytique possible ou de formule magique. Mon idée était de proposer un MPO qui soit un simple excercice de programmation, réalisable sans analyse poussée ou pré-requis d'un savoir mathématique quelconque.

Ce dernier week-end, je me fesais la même réflexion à propos de l'excercie de mathématique qui était bien compliqué et envisageait tout un tas de suites et de théorèmes pour finalemment ne proposer aucune méthode simple et efficace pour déterminer ces nombres.

Voici une autre version pour HP-41 qui trouve n'importe quel Nombre de Keith en moins de 7s:

Code : Tout sélectionner

001 LBL "DKEITH
002 14 XEQ 00 19 XEQ 00 28 XEQ 00 47 XEQ 00 61 XEQ 00 75 XEQ 00  
014 197 XEQ 00 742 XEQ 00 
018 1104 XEQ 00 1537 XEQ 00 2208 XEQ 00 2580 XEQ 00 3684 XEQ 00 4788 
    XEQ 00 7385 XEQ 00 7647 XEQ 00 7909 XEQ 00  
036 31331 XEQ 00 34285 XEQ 00 34348 XEQ 00 55604 XEQ 00 62662 XEQ 00 86935 XEQ 00 93993 XEQ 00 
050 120284 XEQ 00 129106 XEQ 00 147640 XEQ 00 156146 XEQ 00 174680 XEQ 00 183186 XEQ 00 298320
    XEQ 00 355419 XEQ 00 694280 XEQ 00 925993 
070 1084051 XEQ 00 7913837 XEQ 00 
074 11436171 XEQ 00 33445755 XEQ 00 44121607 
080 129572008 XEQ 00 251133297
083 LBL 00
084 X<>Y
085 X>Y?
086 RTN
087 X<>Y
088 STOP
089 RTN
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
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°39 (Nombres de Keith)

Message par Paul Tergeist »

+1Qu'est-ce qu'elle m'a manqué ma 28S pendant presque 3 ans!
Avatar du membre
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3626
Enregistré le : 06 sept. 2011 14:57
Localisation : Normandie

Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)

Message par Hobiecat »

Paul Tergeist a écrit :+1Qu'est-ce qu'elle m'a manqué ma 28S pendant presque 3 ans!
A 73 touches, cela fait partie des machines les plus "boutonneuses" avec les pockets Basic ou les TI nSpire. Il est vraisemblable que ce soit un des critères qui participent bien à la valeur d'usage. Un autre est l'accessibilité : ma machine préférée est ma 15C sur laquelle toutes les fonctions sont accessibles directement : pas de menu et de touches multiples à presser, la contrepartie étant la lenteur et l'absence d'alphanumérique...
Avatar du membre
babaorhum
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 454
Enregistré le : 13 janv. 2013 19:44
Localisation : Marseille-est

Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)

Message par babaorhum »

C.Ret a écrit : Par exemple, les HP48 et HP50 sont des RPL bien plus puissantes que mon viel HP-28S. Pourtant, il reste mon outil de prédilection. J'ai trop de mal à me faire aux claviers surchargés et aux multiples touches préfixes. Le clavier double et simple de la 28 me permet de taper programmes et formules sans constamment chercher s'il faut un préfixe f ou g , flèche droite ou gauche ou un ou deux appuis sur la touche alpha, etc...
C'est vrai, la 48 est exigeante ... elle m'a accompagnée dans mes dernières années d'étude - j'arrivais à m'en servir a peu près à cette époque - et maintenant ... je ne sais jamais dans quel sous menu est la fonction recherchée ... Le RPL est un langage performant mais il faut en faire pour s'y faire !
C.Ret a écrit : Mon idée était de proposer un MPO qui soit un simple excercice de programmation, réalisable sans analyse poussée ou pré-requis d'un savoir mathématique quelconque.
oui, bien vu et sympa ce MPO
C.Ret a écrit : Voici une autre version pour HP-41 qui trouve n'importe quel Nombre de Keith en moins de 7s:
Viva HP-41 !! et juste histoire de taquiner, il faut préciser "... inférieur à 10000000000"

RTN :roll:
BaBaoRhum
HP J728,200LX,1000CX,75C,71B,48GX,42s,41CX,32E,32Sii,28S,22s,21,16C,11C
Sharp PC- E500,1600,1500,1350,1261,1245
Casio FX-502P,602p,850P,3900P,4000P
TI-74,92,95 ; Canon X-07 ; TANDY EC-4026 ; Wp34S
Avatar du membre
tyann
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 845
Enregistré le : 06 oct. 2012 14:37

Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)

Message par tyann »

Bonjour à tous

Pour élargir un peu l'horizon je vous propose une version Lua pour nspire toujours !

Code : Tout sélectionner

var.monitor("n")
r,nt=0,0
function sum(l)
    local s,d=0,0
    for i,d in ipairs(l) do
        s=s+d
    end
    return s
end
function keith(n)
 while 1 do
      local s,l,i,li
       li={}
       s=tostring(n)
       l=string.len(s)
       for i=1,l do
           li[i]=tonumber(string.sub(s,i,i))
       end
       while li[l]<n do
           li[l+1]=sum(li)
           table.remove(li,1)
       end
       if li[l]==n then
           return li[l]
       else
           n=n+1
       end
   end
end
function on.varChange(n)
 nt=var.recall("n")
 r=keith(nt)
 platform.window:invalidate()
end
function on.paint(gc)
    gc:drawString("R="..r,10,20)
end
Voilà comme vous pouvez le voir y a des airs de famille avec le Basic.
Pour l'utilisation, une page de classeur est divisée en 2,une partie calcul et l'autre script Lua
On demande au script de surveiller les changements de la variable n
Il suffit donc de rentrer une valeur dans n <> de la précèdente dans la partie calcul pour déclencher le script et afficher le résultat dans la partie Lua.

Ha j'allais oublier: temps d'exécution pour n=70000 = 31 s 30 pas mal pour un langage interprété non ?
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
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°39 (Nombres de Keith)

Message par Paul Tergeist »

Hobiecat a écrit :ma machine préférée est ma 15C sur laquelle toutes les fonctions sont accessibles directement : pas de menu et de touches multiples à presser, la contrepartie étant la lenteur et l'absence d'alphanumérique...
Moi ça ne me dérange pas la lenteur. Je dirais même que je suis un fou de lenteur...
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)

Message par C.Ret »

Merci tyan

C'est bien sympa cette logique 'objets' qui déclanche le calcul en surveillant une variable. En tout cas très novateur dans le monde des Pockets (et malin, tous les logiciels sur ordi fonctionnent de cette façon :).

Le programme de Babaorhum me plaisait bien, surtout parce qu'il affiche clairement les résultats;
Je voulais l'optimiser, mais je ne sais pas si sur un PC-1500 les tableaux commencent à T(0) ou T(1) ??

Donc voilà une version partiellement optimisée; J'ai utilisé à peu près les mêmes variables que Babaorhum mais en changeant le nom du tableau afin d'éviter d'avoir à utiliser la varaible N1 qui devient N. Mon idée et de préparer une adaptation pour PC-1211.

L'essentiel de l'optimisation vient du regroupement des deux sous-programmes en un seul (ils étaient toujours appelés l'un après l'autre) et surtout en retirant une partie des boucles FOR /TO/NEXT inutiles en utilisant l'astuce de la multiplication du dernier élément par deux.

Dernière astuce, le résultat binaire R est une bonne idée, mais pas mal d'octets et tests sont utilisés pour afficher le résultat.
En modifiant directement le texte contenu par R$, on garde l'aspect binaire/booléen de la chose mais on simplie énormément son exploitation, car il n'y a plus de test. Tout ce passe comme si la valeur booléenne était direcement affichable.
J'ai utilisé l'anglais, plus court que le français car je ne suit pas sûr que les registre d'un PC-1500 supportent plus de 7 caractère ("n'est pas" fait 8 caractères !!); Là aussi je prépare une version SHARP PC-121x

Code : Tout sélectionner

   REM - CALCUL KEITH - MPO 39 - PC1500 - D'APRES VERSION INITIALE DE BABAORHUM 
10 DIM T(10) : WAIT 0
20 "K" INPUT "Number ? ";N : IF N<10 OR N>9E9 THEN END             :REM - SASIE et Vérifications
30 GOSUB 100 : PRINT N ; R$ ;" a Keith number"                     :REM - TEST si N est un Keith
40 N=N+1 : GOSUB 100 : IF R$<>"is" THEN 40                         :REM - Boucle recherche suivant
50 PRINT "Next keith is"; N : GOTO 20

100 S=0 : L=INT(LOG(N)): M=N/10^L : R$="isn't"                     :REM - Décompose et somme                                
110 FOR I=1+L TO 1 STEP -1
120 : C=INT(M) : T(I)=C : S=S+C : M=10*(M-C)                       :REM - en une boucle (qui tient dans une ligne)
130 NEXT I 

150 I=I-1:IF I<1 THEN I=1+L                                        :REM - Calculs termes suivants
160 M=2*S-T(I) : T(I)=S : S=M :  IF S<N THEN 150                   :REM - sans décalage du tableau T()
170 IF S=N THEN R$="is"                                            :REM - Test si Keith ?
180 RETURN
Sur l'écran multiligne d'un PC 1350/1360/1600 on devrait obtenir après avoir entrant 27 on obtient l'affichage :

Code : Tout sélectionner

Number ? 27
 27 isn't a Keith number
Next Keith is 28
Number ? _

Voici la version PC-1211:

Code : Tout sélectionner

1 "K" AREAD N:USING :GOSUB 4:PRINT N;R$;" A KEITH NUMB"
2 N=N+1:GOSUB 4:IF R$<>"IS"GOTO 2
3 PRINT "NEXT KEITH IS";N:END
4 S=0,L=INT LOG N,M=N/10^L,R="ISN,T",O=27
5 FOR I=LTO 0STEP -1:C=INT M,A(I+O)=C,S=S+C,M=10*(M-C):NEXT I
6 I=I-1:IF I<0LET I=L
7 M=2S-A(I+O),A(I+O)=S,S=M:IF S<NGOTO 6
8 IF S=NLET R$="IS"
9 RETURN
Modifié en dernier par C.Ret le 25 févr. 2013 16:52, modifié 3 fois.
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
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2919
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)

Message par zpalm »

Paul Tergeist a écrit :
Hobiecat a écrit :ma machine préférée est ma 15C sur laquelle toutes les fonctions sont accessibles directement : pas de menu et de touches multiples à presser, la contrepartie étant la lenteur et l'absence d'alphanumérique...
Moi ça ne me dérange pas la lenteur. Je dirais même que je suis un fou de lenteur...
Après le slow food, le slow computing: Non à la dictature de la vitesse !!

Prenons le temps de vivre, d'apprécier le calcul d'une racine carrée sur une calculatrice 4 opérations de 1973 en dégustant une potée longuement mijotée:

Square roots - The forgotten way!
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)

Message par C.Ret »

Ah! Ah! Le plan d'un prochain MPO se dessinerait-il à l'horizon ?
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
babaorhum
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 454
Enregistré le : 13 janv. 2013 19:44
Localisation : Marseille-est

Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)

Message par babaorhum »

Pas mal C.ret, ta version PC-1211 est ... belle ...

j'ai toujours l'habitude de décomposer les pb ... du coup le code est assez clair ... mais j'optimise pas ce qui est dommage dans un MPO ... :|

Et pour Paul c'est excellent ... (la potée bien mijotée aussi !!)...je ne sais pas comment vous arrivez a avoir le temps d'aller dénicher toutes ces merveilles ...

GOTO faire les courses ... :(
PRINT "A bientôt"
BaBaoRhum
HP J728,200LX,1000CX,75C,71B,48GX,42s,41CX,32E,32Sii,28S,22s,21,16C,11C
Sharp PC- E500,1600,1500,1350,1261,1245
Casio FX-502P,602p,850P,3900P,4000P
TI-74,92,95 ; Canon X-07 ; TANDY EC-4026 ; Wp34S
Avatar du membre
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3626
Enregistré le : 06 sept. 2011 14:57
Localisation : Normandie

Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)

Message par Hobiecat »

zpalm a écrit :Après le slow food, le slow computing: Non à la dictature de la vitesse !!

Prenons le temps de vivre, d'apprécier le calcul d'une racine carrée sur une calculatrice 4 opérations de 1973 en dégustant une potée longuement mijotée:

Square roots - The forgotten way!
Très chouette cette petite vidéo ! Finalement, tu as raison, lançons le slow computing ! :wink:
Avatar du membre
tyann
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 845
Enregistré le : 06 oct. 2012 14:37

Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)

Message par tyann »

Bonsoir à tous
C'est bien sympa cette logique 'objets' qui déclanche le calcul en surveillant une variable. En tout cas très novateur dans le monde des Pockets
merci d'apprécier.
Lorsque je participerai à un MPO dorénavant, j'essai(e)rai de faire une version Lua, mais c'est un peu plus
difficile pour moi car je pratique moins souvent.
C'est bizarre, quand je me mets au Lua, j'ai toujours cette appéhension que je maitrise pas bien,
puis à la fin quand ça marche, je me dis c'est bien finalement ce langage faut que je persévère.
Ti(s) 60, 62 Galaxy, 66, 67 Galaxy, 68, 74 Basical 80, 81, 82, 83+, 83 CE, 84+SE, 85, 86, 89, 89 titanium, 92, 95 Procalc, v200, nSpire cx
Hp(s) 35s, 41CX, 28S, 48g, 50g, 39gII, Prime G1 et G2,
Casio(s) fx 602P, 702P, 4000P, 4500P, 6000G, 6900G, 7700G, 8500g, PB-700, CG-20, Graph 95 sd
Psion(s)II LZ64, siena, s3a, s3mx, s5mx.
Sharp(s) pc-1350, 1403, 1500A, E500, El 5120, 9200, 9600
Canon X-07
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit, Optimisez - N°39 (Nombres de Keith)

Message par C.Ret »

Hobiecat a écrit :
zpalm a écrit :Après le slow food, le slow computing: Non à la dictature de la vitesse !!

Prenons le temps de vivre, d'apprécier le calcul d'une racine carrée sur une calculatrice 4 opérations de 1973 en dégustant une potée longuement mijotée:

Square roots - The forgotten way!
Très chouette cette petite vidéo ! Finalement, tu as raison, lançons le slow computing ! :wink:
J'ai trouvé mieux pour expliquer comment extraire une racine carrée sans calculette : après les slow computing, le paper and pencil computing ! :D
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.
Répondre

Retourner vers « Tous les Pockets »