Misez p'tit Optimisez n°88 : Suite Joyeuse de Fin d'Année

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

Répondre
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

Misez p'tit Optimisez n°88 : Suite Joyeuse de Fin d'Année

Message par C.Ret »

L'année arrive à sa fin et il sera très bientôt temps de vous souhaiter de Bonnes et Heureuses Fêtes de fin d'année.

Image


Les journées raccourcissent, les nuits sont longues et bien fraîches malgré le réchauffement général climatique. Le monde est fou et s'agite à la préparation des festivités de cette fin 2018.


Certains s'énervent, d'autres s'épuisent, tous nous courront pour achever cette année qui je l'espère aura été pour vous une suite heureuse d'événements et d'aventures. Et, je vous adresserai bien cordialement tous mes vœux de bonheur et de réussite pour vos aventures et tribulations à venir dès 2019.

Mais...
Image

Mais je suis fort inquiet, j'ai trouvé que les mathématiques permettaient de déterminer, par le calcul, si une suite joyeuse est heureuse ou au contraire malheureuse. Et je ne sais pas si c'est le fait de mes calculatrices ou de mes pockets, mais les résultats sont bien moins encourageant pour l'année prochaine que pour cette année. Alors tachons de profiter un maximum de notre chance et célébrons tout cela dignement.

Ce qui est sûr est que Noël prochain s'annonce fort bien, 24122018 est un nombre heureux, ce qui ne sera pas le cas l'année prochaine.

En effet, Noël 2019 génère la suite joyeuse suivante :

24122019 , 111 , 3 , 9 , 81 , 65 , 61 , 37 , 58 , 89 , 145 , 42 , 20 , 4 , 16 , 37 , ...


Suite malheureuse car à partir de 37, elle boucle indéfiniment sans jamais trouver de stabilité ou de repos; Quel malheur !

Alors que cette année, tout se passera bien car l'agitation de la suite joyeuse finit pas trouver un très saint et très serein dénouement en se stabilisant sur l'unité salvatrice :

24122018 , 94 , 97 , 130 , 10 , 1...

Quel bonheur !


Je sais que comme moi vous êtes très bien organisés, que vous trouverez à vous réfugier le soir au coin d'un bon feu de cheminé, après une journée de travail effréné, aux aléas mouvementés par les préparations et des achats de noël en tous genres. Ainsi à l'abri de l'agitation générale, du tumulte des centres commerciaux et des transports en communs bondés et bruyants, qu'une fois installé bien au chaud et au calme, vous trouverez le temps de vérifier à l'aide de vos pockets et calculatrices préférés mes calculs.

Selon les capacités de vos assistants de poches, il vous sera possible, non seulement de vérifier si un nombre est heureux ou non, mais aussi, à l'aide de ceux muni d'une imprimante ou d'un affichage suffisamment confortable, de répertorier les suites joyeuses de cette fin d'année 2018.


Je me permets de vous rappeler la définition suivante :
Suite joyeuse. – Suite d'entiers naturels dont le premier terme est choisi arbitrairement ; le terme qui le suit est la somme des carrés de ses chiffres et ainsi de suite.
Par exemple, si le premier terme est 36, le deuxième sera 45, car 3² + 6² = 9 + 36 = 45. À moins que ce procédé ne conduise à l'unité, il conduit à un cycle qui se reproduit indéfiniment. Ainsi, les nombres 5, 25, 29, 85, 89, 145, 42, 20, 4, 16, 37, 58, 89, ... forment une suite joyeuse initiée par 5 dont le cycle commence à 89 et finit à 58. Lorsque la suite se termine par 1, les nombres de cette suite sont dits heureux.


Malgré le chaos qui nous entoure, trouvons un peu de stabilité et convergeons vers l'unité...
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.
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Re: Misez p'tit Optimisez n°88 : Suite Joyeuse de Fin d'Année

Message par Ben »

Salut
Pour l'année 2018, il n'y a pas beaucoup de jours "heureux". J'en au compté 49.
Pour les jours "joyeux", dès qu'on tombe dans une série commençant par "4, 16, 20, 37, 39, 42, 58, 89, 145", on commence à boucler.
C'est très "statistique" tout ça.

Voici le premier jet d'un programme sur C-128. Il affiche et imprime les jours joyeux pour une année (ici 2018, variable A1) et donne la séquence pour le jours heureux. Bon, je vous épargne le listing produit ;-)

Code : Tout sélectionner

1 FAST
5 OPEN4,4
10 DIM J(12):J(1)=31:J(2)=28:J(3)=31:J(4)=30:J(5)=31:J(6)=30:J(7)=31:J(8)=
31:J(9)=30:J(10)=31:J(11)=30:J(12)=31:J1=0:M1=0:A1=2018
20 DIM R(100):SCNCLR:H=0
30 J1=J1+1:IF J1>J(M1) THEN J1=1:M1=M1+1
35 REM  IF M1>12 THEN M1=1:A1=A1+1
40 IF M1>12 THEN 210
50 N=J1*1000000+M1*10000+A1
60 PRINT "JOUR=";N;:PRINT#4,N;
70 I=0
80 C=0
90 D=INT(N/10):B=N-D*10:N=INT(N/10)
100 C=C+B*B
110 IF N>0 THEN 90
120 IF I=0 THEN 150
130 FOR O=1 TO I:IF R(O)=C THEN GOTO 160
140 NEXT O
150 I=I+1:R(I)=C:N=C:GOTO 80
160 IF S=0 THEN S=C:GOTO 180
170 IF C=S THEN S=0:PRINT "JOYEUX":PRINT#4,"JOYEUX":GOTO 30
180 PRINT C;:PRINT#4,C;
190 IF C<>1 THEN N=C:GOTO 80
200 IF C=1 THEN S=0:H=H+1:PRINT "HEUREUX":PRINT#4,"HEUREUX":GOTO 30
210 PRINT "NBR JOURS HEUREUX=";H
215 PRINT#4,"NBR JOURS HEUREUX=";H
220 CLOSE 4
PS: est-ce que je suis encore dans le Misez p'tit?
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2143
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Misez p'tit Optimisez n°88 : Suite Joyeuse de Fin d'Année

Message par cgh »

Sur PC1500/1600 (ou autre SHARP), le programme n'est pas optimise.
On saisit le nombre, puis DEF N. Chaque nombre est affiche. Appuyer sur ENTER pour passer au suivant. Le programme s'arrete si la suite est heureuse...

Code : Tout sélectionner

10 AREAD A:N=0:N=0:CLS:WAIT
20 A=INT A:A=A/10:P=(A-INT A)*10:N=N+P*P:IF A>0THEN 20
30 PRINT N:IF M<>NLET M=N:A=N:N=0:GOTO 20
PS: "CGH", ie, 677172 est heureux :geek: :D -> 188 129 86 100 1 :mrgreen:

PS2: Excellent cet MPO ! Merci C.Ret :)
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque
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°88 : Suite Joyeuse de Fin d'Année

Message par C.Ret »

Ben a écrit : 17 déc. 2018 20:53 […]
PS: est-ce que je suis encore dans le Misez p'tit?
Un Commodore C128 ne fait (à moins d'être étendu par des bancs mémoire supplémentaires, prévus mais très très rarement installés) que 128 kio
A une époque où même les téléphones font quelque dizaine de Gio, alors oui DE FACTO, le simple fait de vouloir programmer un tel engin c'est du "Misé Petit et Optimisé " :) :) :)

En effet, je trouve aussi 49 jours heureux en 2018.
mpo88 Année Joyeuse 2018.gif
mpo88 Année Joyeuse 2018.gif (212.31 Kio) Vu 11563 fois
Je ne m'étais pas rendu compte que 2019 sera globalement un peu plus heureuse avec 54 jours (dont pas moins de 11 dimanches heureux)
mpo88 Année Joyeuse 2019.gif
mpo88 Année Joyeuse 2019.gif (213.08 Kio) Vu 11563 fois
Mais rien ne vaut l'année 1968; on a 66 jours heureux :)
mpo88 Année Joyeuse 1968.gif
mpo88 Année Joyeuse 1968.gif (213.53 Kio) Vu 11563 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
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°88 : Suite Joyeuse de Fin d'Année

Message par C.Ret »

J'oubliais de poster le listing:

Code : Tout sélectionner

10 data janv,31,fevr,28,mars,31,avri,30,mai,31,juin,30,juil,31,aout,31,sept,30,octo,31,nove,30,dece,31
20 j$="[MIN]Lu[MIN]Ma[MIN]Me[MIN]Je[MIN]Ve[MIN]Sa[UND ON]Di":s$="                                          "
100 graphic 0,1:slow:input "année ";a%:aa%=a%-100*int(a%/100):b%=365:if aa%=4*int(aa%/4) then b%=366
110 d%=a%-1968+int((a%-1964.999)/4):d%=d%-7*int(d%/7)
120 graphic 5,1:print chr$(27)"m[RVS ON][HOME]"left$(s$,37)str$(a%)left$(s$,38)
130 for m=1 to 12
140 :  j%=1:read m$,m%:if m=2 and b%>365 then m%=29
150 :  y%=y%+1:print tab(x%)"[DRK CYN][RVS ON][MAJ]"left$(m$+"   ",4)
160 :  do
170 :  :  if y%>23 then x%=x%+5:y%=0:print "[HOME]"
180 :  :  n=j%+100*m+1e4*a%:gosub 900:color 5,11:if n=1 then color 5,14:h%=h%+1
190 :  :  if j%=13 and d%=4 then color 5,3:if n=1 then color 5,6
200 :  :  print tab(x%)"[MIN][UND OFF]"mid$(j$,1+3*d%,3)right$(str$(j%),2)
210 :  :  y%=y%+1:j%=j%+1:d%=d%+1:if d%=7 then d%=0
220 :  loop until j%>m%
230 next m
240 print tab(x%)"[LT RED][DWN]"str$(b%-h%):print tab(x%)"[LT GRN]"str$(h%)
250 graphic 0 : end

900 graphic 0:l$="":do:n$=str$(n):if instr(l$+" ",n$+" ") then exit
910 :  l$=l$+n$:n=0:for i=2 to len(n$) :  n%=asc(mid$(n$,i,1))-48:n=n+n%*n%  : next i
920 loop :print "[WHT]"l$:graphic 5:return
Modifié en dernier par C.Ret le 18 déc. 2018 17:12, modifié 1 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.
Ben
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1549
Enregistré le : 21 août 2016 19:04

Re: Misez p'tit Optimisez n°88 : Suite Joyeuse de Fin d'Année

Message par Ben »

C.Ret a écrit : 18 déc. 2018 10:57 Mais rien ne vaut l'année 1968; on a 66 jours heureux :)
En 1970, il n'y en avait que 36! Pourtant, c'est une année exceptionnelle :-D
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°88 : Suite Joyeuse de Fin d'Année

Message par dprtl »

Voici ma contribution pour Casio PB1000. Elle est optimisée par rapport au temps de calcul. Pour avoir des réponses quasi instantanées sur ce CPU à 910 KHz sans faire appel à l'assembleur, mon idée était d'utiliser un pré-calcul pour accélérer autant que possible le test des nombres heureux jusqu'à 99999999. La somme des chiffres au carré de 99999999 fait 648. Dans le programme ci-dessous, je me contente donc de calculer une fois la somme des carrés, puis de "matcher" dans mes 6 chaînes pré-calculées (6 x 108 caractères = 648) si le nombre est heureux, ou pas.

Code : Tout sélectionner

10 DIM H$(5)
20 H$(0)="100000100100100000100010000100110000000000010000100000000000000000010100000000100100010000100100100100100000"
30 H$(1)="100000000000000000001100100000100000000000000000000000000010000000010000000000010101100000000010000100000000"
40 H$(2)="001000000100010000010010000000000000000000000110000000000000000100000000001010000000110000000100100000110000"
50 H$(3)="010010100000010000000000000000010000010010110000000100100010010000110000100000010000100000000000000000000000"
60 H$(4)="000000010000010000000000000000010000100000000100000000100100000100000000000000000000000000000000000000010000"
70 H$(5)="000000000000000100000010110000000000000000000000000000000000000000010000000010000110000000010010110000010000"
80 INPUT"N";N$:S=-1:FOR I=1 TO LEN(N$):S=S+(ASC(MID$(N$,I,1))-48)^2:NEXT
90 R=INT(S/108):IF MID$(H$(R),S-R*108+1,1)="1" THEN PRINT "Heureux" ELSE PRINT "Malheureux"
100 GOTO 80
Exemples d'usage :

Code : Tout sélectionner

N?1
Heureux
N?677172
Heureux
N?24122018
Heureux
N?24122019
Malheureux
N?99999999
Malheureux
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°88 : Suite Joyeuse de Fin d'Année

Message par C.Ret »

cgh a écrit : 17 déc. 2018 21:03 Sur PC1500/1600 (ou autre SHARP), le programme n'est pas optimise.
On saisit le nombre, puis DEF N. Chaque nombre est affiche. Appuyer sur ENTER pour passer au suivant. Le programme s'arrete si la suite est heureuse...

Code : Tout sélectionner

10 AREAD A:N=0:N=0:CLS:WAIT
20 A=INT A:A=A/10:P=(A-INT A)*10:N=N+P*P:IF A>0THEN 20
30 PRINT N:IF M<>NLET M=N:A=N:N=0:GOTO 20
Pour les SHARP ne gérant pas complètement les chaines de caractère, j'en étais arrivé à la solution de cgh avec un même mode opératoire:

Code : Tout sélectionner

1:"N" AREAD Y
2:Z=Y,X=0
3:X=X+(Z-INT .1Z)^2,Z=INT .1Z:IF ZGOTO 3
4:PRINT Y,X:Y=X:IF X>1GOTO 2
C'est bien pour déterminer le terme suivant mais c'est un peu long pour déterminer toute une suite joyeuse.

Avec les SHARP ayant une gestion convenable des chaines de caractère, j'ai trouvé un one liner :

Code : Tout sélectionner

1:"N" AREAD N:NN$= STR$ N,N=0: FOR I=1 TO LEN NN$:N=N+ VAL MID$ (NN$,I,1)^2: NEXT I: PRINT N;: GOTO 1
Même si cela ne se voit pas dans le code, une pression sur ENTER permet de passer au terme suivant.

Par contre, la détermination des séries joyeuses reste un peu fastidieuse même si une version automatique existait, elle n'est pas très optimisée :

Code : Tout sélectionner

1:"S" INPUT "Start ";N: S$= CHR$ 126: WAIT 0
2:NN$= STR$ N: PRINT NN$; S$;: IF S$<"A" END
3: FOR I=1 TO LEN NN$:N=N+ VAL MID$ (NN$,I,1)^2: NEXT I
4:IF N=1 OR N=4 OR N=16 OR N=20 OR N=37 OR N=42 OR N=58 OR N=89 OR N=145 LET S$="..."
5:GOTO 2 
Si le programme s'arrête en affichant 1... alors il s'agit d'une fin heureuse sinon les points de suspension indiquent une série malheureuse.


Je n'avais pas de solution pour une automatisation efficace sur mon SHARP PC1211, avant de voir l'idée génial de dprtl :
dprtl a écrit : 18 déc. 2018 23:01

Code : Tout sélectionner

10 DIM H$(5)
20 H$(0)="100000100100100000100010000100110000000000010000100000000000000000010100000000100100010000100100100100100000"
30 H$(1)="100000000000000000001100100000100000000000000000000000000010000000010000000000010101100000000010000100000000"
40 H$(2)="001000000100010000010010000000000000000000000110000000000000000100000000001010000000110000000100100000110000"
50 H$(3)="010010100000010000000000000000010000010010110000000100100010010000110000100000010000100000000000000000000000"
60 H$(4)="000000010000010000000000000000010000100000000100000000100100000100000000000000000000000000000000000000010000"
70 H$(5)="000000000000000100000010110000000000000000000000000000000000000000010000000010000110000000010010110000010000"
80 INPUT"N";N$:S=-1:FOR I=1 TO LEN(N$):S=S+(ASC(MID$(N$,I,1))-48)^2:NEXT
90 R=INT(S/108):IF MID$(H$(R),S-R*108+1,1)="1" THEN PRINT "Heureux" ELSE PRINT "Malheureux"
100 GOTO 80
Qui me donne une solution pour mon heureux PC-1211 ( eh oui 1211 est un nombre heureux):

Code : Tout sélectionner

1:A=6719808642,B=33792,C=4907616261,D=2550136962,E=8+2^31,F=8603828288
2:G=4366303248,H=50331650,I=1613234432,J=4337983632,K=440467456,L=1082528292
3:M=2+2^32,N=138412048,O=1067012,P=2^26,Q=6819840,R=2^30,S=4405070880
4:T=168298120,U=537935881,V=37748740,W=40961
5:INPUT X:Z=X<816,Y=ZX,Z=X-Y
6:IF ZLET Y=Y+INT (Z-10INT .1Z)^2,Z=INT .1Z:GOTO 6
7:Z=Y,Y=INT (Y/34 ,Z=INT (A(1+Y)/2^(Z-34Y  ,Z=Z-2*INT .5Z:PRINT X,Z:GOTO 5 
C'est très exactement l'algorithme de dprtl, aux différences suivantes :
- optimise la détermination des suites joyeuses tous les nombres jusqu'à 10 chiffres (capacité maximale du pocket) soit jusqu'à 9'999'999'999.
- mémorise 816 résultats précalculés. Ces résultats sont notés dans les registres A à W (inclus) sous forme binaire (0=malheureuse 1=heureuse), chaque registre couvre une étendue de 34 nombres,
- calcule au plus une seule fois a somme des carrés des chiffres. Ce calcul est évité pour tous les arguments inférieurs à 816 (resp. 850 sur la version PC-1360)
- affiche le résultat de façon laconique en rappelant le terme initial de la suite et s'il s'agit d'une suite joyeuse malheureuse (0.) ou heureuse (1.)

Code : Tout sélectionner

1:DATA 6719808642,33792,4907616261,2550136962,2147483656,8603828288
2:DATA 4366303248,50331650,1613234432,4337983632,440467456,1082528292
3:DATA 4294967298,138412048,1067012,67108864,6819840,1073741824
4:DATA 4405070880,168298120,537935881,37748740,40961,17828100
5:"S" INPUT X: RESTORE :Y=X*(X<850),NN$= STR$ X
6:IF Y=0 FOR I=1 TO LEN NN$:Y=Y+VAL MID$(NN$,I,1)^2: NEXT I:NN$=NN$+ CHR$ 44+ STR$ Y
7:Z=Y MOD 34: FOR I=0 TO Y/34: READ A: NEXT I: PRINT NN$+",...", INT (A/2^Z) MOD 2: GOTO 5
Modifié en dernier par C.Ret le 23 déc. 2018 10:16, modifié 1 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
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°88 : Suite Joyeuse de Fin d'Année

Message par C.Ret »

mpo 88 - Série Joyeuse (1-99).png
mpo 88 - Série Joyeuse (1-99).png (127.29 Kio) Vu 11412 fois

Code : Tout sélectionner

  9:  8:  7:  6:  5:  4:  3:  2:  1:  0:
--- --- --- --- --- --- --- --- --- ------------------------------------
                     44→ 32→ 13→ 10→  1.
                     19→ 82→ 68→100→  1.
  6→ 36→ 45→ 41→ 17→ 50→ 25→ 29→ 85→ 89→145→ 42→ 20→  4→ 16→ 37→ 58→_89_
         88→128→ 69→117→ 51→ 26→ 40→ 16→ 37→ 58→ 89→145→ 42→ 20→  4→_16_
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°88 : Suite Joyeuse de Fin d'Année

Message par Gilles59 »

Après un période compliquée, je suis heureux (au contraire de ma date de naissance ;D ) d'être de retour ici et retrouver les excellents MPO de C.Ret.

Celui-ci est l'occasion de ressortir mon hP50g et utiliser l'indispensable bibliothèque de traitement de listes ListExt de David Mutter. Remarquablement bien faite, rapide et légère, Voir : https://www.hpcalc.org/details/7971. A télécharger absolument sur votre 49/50g

Calculer le nombre suivant de liste est aussi simple que :

Code : Tout sélectionner

« I➔NL SQ LSUM »
Comment ça marche ? Supposons 24122019 sur la pile :

Code : Tout sélectionner

24122019 I➔NL  retourne { 2 4 1 2 2 0 1 9 }   // I➔NL  Integer to Number List
SQ retourne { 4 16 1 4 4 0 1 81 }  // Met tous les nombres au carré
LSUM retourne 111 // Somme de tous les éléments d'un liste
En utilisant l'astuce de Dprtl, le programme devient :

Code : Tout sélectionner

«
 "100000100100100000100010000100110000000000010000100000000000000000010100000000100100010000100100100100100000100000000000000000001100100000100000000000000000000000000010000000010000000000010101100000000010000100000000001000000100010000010010000000000000000000000110000000000000000100000000001010000000110000000100100000110000010010100000010000000000000000010000010010110000000100100010010000110000100000010000100000000000000000000000000000010000010000000000000000010000100000000100000000100100000100000000000000000000000000000000000000010000000000000000000100000010110000000000000000000000000000000000000000010000000010000110000000010010110000010000"
 SWAP I➔NL SQ LSUM DUP SUB
»
'Heureux?' STO
Il suffit de taper la date initiale puis lancer le programme qui retourne "1" pour une suite 'heureuse' et "0" pour une suite 'malheureuse'

Tous les jours heureux de 2018, sous forme d'une liste (avec le drapeau 42 ON pour un format date en français) :

Code : Tout sélectionner

«
 {} 'JoursHeureux' STO
 31.122017
 DO
  1 DATE+ 
  IF DUP 1E6 * Heureux? STR➔ THEN 'JoursHeureux' OVER 1 TSTR 1 12 SUB STO+ END
 UNTIL DUP 31.122018 == END
 JoursHeureux
»
donne :

Code : Tout sélectionner

{ "WED 03.01.18" "THU 04.01.18" "TUE 30.01.18" "SAT 03.02.18" "TUE 06.02.18" "FRI 23.02.18" "THU 01.03.18" "FRI 02.03.18" "SUN 04.03.18" "MON 05.03.18" "SAT 10.03.18" "TUE 20.03.18" "THU 22.03.18" "FRI 23.03.18" "SUN 01.04.18" "TUE 03.04.18" "TUE 10.04.18" "THU 19.04.18" "MON 30.04.18" "THU 03.05.18" "SUN 06.05.18" "SAT 19.05.18" "WED 30.05.18" "SAT 02.06.18" "TUE 05.06.18" "WED 20.06.18" "FRI 29.06.18" "SAT 07.07.18" "SUN 29.07.18" "FRI 14.09.18" "SAT 15.09.18" "WED 26.09.18" "THU 27.09.18" "WED 03.10.18" "THU 04.10.18" "TUE 30.10.18" "THU 15.11.18" "THU 22.11.18" "SAT 24.11.18" "SUN 25.11.18" "WED 28.11.18" "WED 12.12.18" "FRI 14.12.18" "SAT 15.12.18" "TUE 18.12.18" "FRI 21.12.18" "SAT 22.12.18" "MON 24.12.18" "TUE 25.12.18" }
Mon année de naissance n'a que 45 jours heureux. Je vous la laisse deviner ... ;D
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
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°88 : Suite Joyeuse de Fin d'Année

Message par C.Ret »

Ah! Oui ! j'aime bien ça :

Code : Tout sélectionner

« I➔NL SQ LSUM »
Trois instructions qui font tout le boulot , c'est du vrai, fort et bien MPO'iser !



Bien heureux de te retrouver sur le forum, et j'espère en grande forme…

Il va falloir que je m'applique à nouveau avant de publier n'importe quoi par ici :)
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 »