Misez p'tit Optimisez n°53 : la suite de Syracuse

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 de l’utilisateur
C.Ret
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2322
Inscription : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit Optimisez n°53 : la suite de Syracuse

Message par C.Ret » 21 mai 2020 18:22

Chapeaux bas ! C'est bien un Truc comme cela que j'envisageais :) :)

Mon souci était que j'utilisais +\[n] pour réduire selon un rang donné la matrice issue des produits extérieurs et j'avais un souci lorsque les dimensions n'étaient pas de multiples ou sous-multiples. Je n'avais pas pensé à redimensionner la donnée de base (la série) ce qui facilite le traitement.

Mais j' n'était pas loin d'un résultat similaire tout en utilisant la série totale, le redimensionner la matrice issue du produit externe afin de regrouper (opérateur OR) ou additionner (+) en réduisant selon un des rangs afin de limiter le nombre de colonne ou de ligne. Ensuite, un petit TAU pour convertir le 'code binaire' des trois plans (barre regroupée, barre simple et point logarithmique) en code 'graphique'.

P.S.: Le serveur ne répond plus. Je posterai cela en plu clair après-demain. Localement je n'ai pas de quoi saisir les codes APL.

P.S.2: le serveur ne répond toujours pas. J'espère qu'Eric et moi n'avons pas cassé le machin qui permet de faire le Truc à gégé :(
SHARP PC-1211 + CE-121 + CE-122. | VIC 20 Commodore 128D + Printer P-803 + SD2iec. | TI-57 LCD | TI-74 BasiCalc | TI-92 II | HP-28S + HP82240A | HP-41C + (2 memory + stat + IR) modules. | HP Prime Wireless Graphing Calculator | HP-15C | CASIO fx-602p + FA-1. .Sommaire des M.P.O.. . Sommaire du P.C.T.M. .

Avatar de l’utilisateur
Schraf
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 66
Inscription : 05 mars 2020 21:45
Contact :

Re: Misez p'tit Optimisez n°53 : la suite de Syracuse

Message par Schraf » 21 mai 2020 19:18

Oui leur serveur plante régulièrement :oops:

Une astuce

Code : Tout sélectionner

8⍴3↑1
1 0 0 1 0 0 1 0

TRANCHE←{((⍴⍵)⍴⍺↑1)⊂⍵}
      3 TRANCHE ⍳20
 1 2 3  4 5 6  7 8 9  10 11 12  13 14 15  16 17 18  19 20 
      7 TRANCHE ⍳20
 1 2 3 4 5 6 7  8 9 10 11 12 13 14  15 16 17 18 19 20 
Que l'on peut aussi écrire comme ça si on veut gagner 1 caractère (⍨ permet d'inverser les arguments)

Code : Tout sélectionner

TRANCHE←{⍵⊂⍨(⍴⍵)⍴⍺↑1}
Ça permet de réécrire DEC et PLTS:

Code : Tout sélectionner

DEC←{m←⌈/⍵ ⋄ ⍺[2]×{(m⍟1⌈a),(a←2↑⍵[⍒⍵])÷m}¨(r⍴1↑⍨⌈(r←⍴⍵)÷⍺[1])⊂⍵}
PLTS←{'  ⎕⌸∘⌺⌺∘⌺⌺'[+/¨1+(2↓¨w∘.≥v)+3×(⌊2↑¨w←⍺ DEC ⍵)∘.=v←0,⍳⍺[2]]}
ou encore :

Code : Tout sélectionner

DEC←{m←⌈/⍵ ⋄ ⍺[2]×{(m⍟1⌈a),(a←2↑⍵[⍒⍵])÷m}¨⍵⊂⍨r⍴1↑⍨⌈⍺[1]÷⍨r←⍴⍵}

Code : Tout sélectionner

  6 8 PLTS SYR 2097152
⌸⌸⌸⌸⌸⎕⎕⌺⌺
⌸    ∘∘  
⌸  ∘∘    
⌸∘∘      
⌺ 

   10 10 PLTS SYR 27
⌸    ∘∘    
⌸     ∘    
⌸⌸     ∘∘  
⌸⌸     ∘   
⌸⌸⌸⎕    ∘  
⌸⌸⌸⌸⌸⌸⌸⌸⎕⌺⌺
⌸⌸⌸⎕⎕⎕  ∘∘ 
⌸    ∘     
⌸  ∘ 

Avatar de l’utilisateur
Schraf
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 66
Inscription : 05 mars 2020 21:45
Contact :

Re: Misez p'tit Optimisez n°53 : la suite de Syracuse

Message par Schraf » 22 mai 2020 20:32

Version graphique LIN et LOG (Cf poste initial de @C.Ret) pour la Ti-80 (1995)

Contraintes : Listes limitées à 100 éléments, pas de "While"
Solution :
Utiliser 2 listes pour pouvoir atteindre des vols jusqu'à 200.
Goto + Lbl pour remplacer le "While"
Affichage d'un premier écran (quand le vol dépasse 100) puis d'un second

Code : Tout sélectionner

PROGRAM:SYR
1->T:X->M:1->S
CLRLIST L1,L2
LBL 1
X->L1(T
3X+1->X
IF FPART(X/2:IPART(X/6->X
T+1->T
IF X>M:X->M
IF X=1:RETURN
IF T=100
THEN
L1->L2:T-99->T
0->S:CLRLIST L1
END
GOTO 1
Et le programme principal :

Code : Tout sélectionner

PROGRAM:PLTS
INPUT X
PRGM_SYR
1->XMIN
1->YMIN
M->YMAX
100(1-S)+SDIM L1->XMAX
IF S:GOTO 1
L1->L4:L2->L1
LBL 1
MLN L1/LN M->L2
FNOFF
CLRDRAW
FOR(X,1,DIM L1)
LINE(X,L2(X),X+1,L2(X))
LINE(X,0,X,L1(X))
LINE(X,L1(X),X+1,L1(X))
LINE(X+1,L1(X),X+1,0)
END
DISPGRAPH
PAUSE
IF S:RETURN
L4->L1:1->S
GOTO 1
Pour N = 703 :
IMG_20200522_232114_resized_20200522_112330324.jpg
703 partie 1
IMG_20200522_232114_resized_20200522_112330324.jpg (61.62 Kio) Consulté 1385 fois
IMG_20200522_232206_resized_20200522_112330084.jpg
703 partie 2
IMG_20200522_232206_resized_20200522_112330084.jpg (65.64 Kio) Consulté 1385 fois
Pour N=873:
IMG_20200522_223044_resized_20200522_103219548.jpg
873 partie 1
IMG_20200522_223044_resized_20200522_103219548.jpg (60.58 Kio) Consulté 1387 fois
IMG_20200522_223126_resized_20200522_103219758.jpg
873 partie 2
IMG_20200522_223126_resized_20200522_103219758.jpg (62.97 Kio) Consulté 1387 fois
A partir des Ti-82 et 83 les listes peuvent contenir 999 termes, ce qui permet de visualiser par exemple un temps de vol de 524 (avec N=837799) sur un seul écran :
ti83ce.jpg
837799 avec Vol = 524
ti83ce.jpg (133.22 Kio) Consulté 1377 fois

Avatar de l’utilisateur
Danny
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 340
Inscription : 28 déc. 2013 17:34

Re: Misez p'tit Optimisez n°53 : la suite de Syracuse

Message par Danny » 09 juil. 2020 12:09

Pas mal cette suite !
J'ai fait une version pour HP 48 ou 50, pas spécialement optimisée mais surtout pour avoir un affichage graphique sympa.

Entrée: nombre de départ.
Sortie: tracé graphique linéaire et logarithmique avec affichage de l'altitude max et du temps de vol, liste des termes, temps de vol et altitude max.

Variables :
n: nombre de départ
m: terme maxi calculé (altitude maximale)
c: compteur de termes
p: coordonnées du point précédent (pour tracé des lignes)
f: temps de vol

Code : Tout sélectionner

<<
 DUP 1 0 -> n m c p
 <<
  { } n +                     // ajoute le 1er terme à la liste
  "Computing..." 1 DISP
  DO
   IF n 2 MOD 0 ==            // calcule le terme suivant
   THEN n 2 / 'n' STO
   ELSE n 3 * 1 + 'n' STO
   END
   n +                        // ajoute le nouveau terme à la liste
   c 1 + 'c' STO

   IF n m >                   // met à jour le maximum le cas échéant
   THEN n 'm' STO
   END

  UNTIL n 1 ==                // fin de la boucle quand le terme vaut 1 (fin du temps de vol)
  END

  ERASE                       // initialise la zone graphique
  1 c XRNG                    // abscisse de 1 jusqu'au nombre de termes (= temps de vol)
  1 m YRNG                    // ordonnée de 1 jusqu'au terme maxi (= altitude maxi)
  CLLCD
  "Drawing..." 1 DISP

  (0,0) 'p' STO

  1 c FOR i                   // parcourt la liste pour tracer le graphique
   DUP
   i GET
   i SWAP
   R->C DUP                   // R->C transforme X et Y en un seul objet complexe (X,Y)
   p
   LINE                       // trace la ligne entre le point en cours et le précédent
   'p' STO                    // stocke les coordonnées pour tracer la ligne suivante
   i GET LN
   m LN / m *
   i SWAP
   R->C PIXON                 // trace le terme en coordonnées logarithmiques
  NEXT

  PICT 1 m R->C m ->STR 1 ->GROB GOR  // affiche l'altitude max sur le graphique
  DUP SIZE 1 - -> f
  <<
    PICT f .9 * m R->C f ->STR 1 ->GROB GOR  // affiche le temps de vol sur le graphique

    PICT RCL ->LCD { } PVIEW  // affiche le graphique final

    f "flight time" ->TAG     // affiche le temps de vol et l'altitude max dans la pile
    m "max. altitude" ->TAG
  >>
 >>
>>
Exemple pour 347 :
Syracuse_HP50g_1.jpg
Syracuse_HP50g_1.jpg (129.87 Kio) Consulté 1046 fois
Syracuse_HP50g_2.jpg
Syracuse_HP50g_2.jpg (136.06 Kio) Consulté 1046 fois
Casio fx-3900p, 7000G, 6000G, 6500G, 6800G, 8500G, 9900GC, 9950GB +, Graph 100+ USB
HP 35, 45, 65, 21, 25, 33E, 41CX, 42S, 28S, 32SII, 48SX, 48GX, 50g, Prime
Sharp EL-9000

Avatar de l’utilisateur
C.Ret
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2322
Inscription : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Misez p'tit Optimisez n°53 : la suite de Syracuse

Message par C.Ret » 10 juil. 2020 17:46

WOW, superbes LIN/LOG graph que tout cela, bravo !
SHARP PC-1211 + CE-121 + CE-122. | VIC 20 Commodore 128D + Printer P-803 + SD2iec. | TI-57 LCD | TI-74 BasiCalc | TI-92 II | HP-28S + HP82240A | HP-41C + (2 memory + stat + IR) modules. | HP Prime Wireless Graphing Calculator | HP-15C | CASIO fx-602p + FA-1. .Sommaire des M.P.O.. . Sommaire du P.C.T.M. .

Répondre

Revenir vers « Tous les Pockets »