[Challenge mono-ligne] Traitement chaine

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
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

[Challenge mono-ligne] Traitement chaine

Message par charognard » 15 févr. 2015 20:42

Pour ce 2eme challenge
En entrée on fournira une séquence Alpha de A à Z
chaque lettre de cette chaine sera évaluée de la sorte

A=1
B=2
..
Z=26

Le résultat est la multiplication de la valeur de chaque terme

Exemple pour
ABCDEFGH
ça donnera
1x2x3x4x5x6x7x8=40320

Le challenge sera de 3 sorte
1) le code le plus concis possible (en octets)
2) Execution la plus rapide entre le moment de la validation saisie de la chaine (Touche ENTER] et l'affichage du résultat.
3) La prise en charge jusqu'à 10 caractères serait un + (Même si le résultat fourni un exposant).

Le programme sera à faire sur un OP des années 80.

Le fonctionnement demandé :
RUN[ENTER]
saisie de la chaine[ENTER]
chronométrage
Affichage du résultat

Bon challenge

remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2086
Inscription : 13 mars 2006 16:39
Localisation : Issy
Contact :

Re: [Challenge mono-ligne] Traitement chaine

Message par remy » 15 févr. 2015 21:18

Code : Tout sélectionner

10 FOR I = 1 TO 26: A(I)=I: NEXT I
ensuite en mode run il suffit de taper ABCDEFGH Entrée pour avoir le résultat.

Sur un PC-1211 of course.
PockEmul, Emulateur de pocket Sharp, Canon, Casio, HP, TI, NEC, Panasonic, Sanco, Seiko, General, National, ....
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store

Avatar de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7180
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: [Challenge mono-ligne] Traitement chaine

Message par gege » 15 févr. 2015 21:25

Bonjour,
Magnifique !
Sur HP71B :

Code : Tout sélectionner

10 INPUT A$ @ P=1 @ FOR I=1 TO LEN(A$) @ P=P*(NUM(A$[I])-64) @ NEXT I @ PRINT P
46 octets, difficile à chronométrer car presque instantané...
G.E.
Dernière édition par gege le 15 févr. 2015 21:26, édité 1 fois.

Avatar de l’utilisateur
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 4847
Inscription : 21 nov. 2012 14:03
Localisation : Ile de France

Re: [Challenge mono-ligne] Traitement chaine

Message par bernouilli92 » 15 févr. 2015 21:26

@remy: Excellent, en plus vu la méthode d'évaluation proposée, le temps de calcul ne peut que être minimal.
HP, Casio, Sharp, Psion, quelques TI et divers autres

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: [Challenge mono-ligne] Traitement chaine

Message par charognard » 15 févr. 2015 21:32

remy a écrit :

Code : Tout sélectionner

10 FOR I = 1 TO 26: A(I)=I: NEXT I
ensuite en mode run il suffit de taper ABCDEFGH Entrée pour avoir le résultat.

Sur un PC-1211 of course.
Essai intéressant

SEULEMENT TON CODE NE FONCTIONNE PAS CORRECTEMENT !!!

car il sort de la boucle prématurément
essai avec la chaine IJKLMNOP pour voir

Tu me déçois Rémy sur ce coup là :pirat:
FOR A(27)=1 TO 26:A(A(27))=A(27):NEXT A(27)
Dernière édition par charognard le 15 févr. 2015 21:46, édité 1 fois.

remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2086
Inscription : 13 mars 2006 16:39
Localisation : Issy
Contact :

Re: [Challenge mono-ligne] Traitement chaine

Message par remy » 15 févr. 2015 21:45

tu as raison, je suis allé un peu vite.

Code : Tout sélectionner

10 FOR A = 2 TO 26: A(A)=A: NEXT A:A=1
PockEmul, Emulateur de pocket Sharp, Canon, Casio, HP, TI, NEC, Panasonic, Sanco, Seiko, General, National, ....
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: [Challenge mono-ligne] Traitement chaine

Message par charognard » 15 févr. 2015 21:52

remy a écrit :tu as raison, je suis allé un peu vite.
Mais je ne suis pas pour autant daccord avec ta solution. Il vaut mieux utiliser A dans la boucle et ajouter a=1 à la fin. Ça consomme moins d'octets
Avec Z ça peut le faire alors
Dernière édition par charognard le 15 févr. 2015 21:56, édité 2 fois.

remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2086
Inscription : 13 mars 2006 16:39
Localisation : Issy
Contact :

Re: [Challenge mono-ligne] Traitement chaine

Message par remy » 15 févr. 2015 21:54

J'ai pas essayé mais avec le premier code I vaut 26 au lieu de 9.
PockEmul, Emulateur de pocket Sharp, Canon, Casio, HP, TI, NEC, Panasonic, Sanco, Seiko, General, National, ....
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: [Challenge mono-ligne] Traitement chaine

Message par charognard » 15 févr. 2015 21:58

Code : Tout sélectionner

10 FOR Z = 1 TO 26: A(Z)=Z: NEXT Z
Ok et testé là

Z sort à 26 et non pas à 27 comme sur certain pockets
Dernière édition par charognard le 15 févr. 2015 23:38, édité 1 fois.

remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2086
Inscription : 13 mars 2006 16:39
Localisation : Issy
Contact :

Re: [Challenge mono-ligne] Traitement chaine

Message par remy » 15 févr. 2015 22:02

perfect... mais en partant de 1 ... on y arrive
PockEmul, Emulateur de pocket Sharp, Canon, Casio, HP, TI, NEC, Panasonic, Sanco, Seiko, General, National, ....
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store

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

Re: [Challenge mono-ligne] Traitement chaine

Message par C.Ret » 15 févr. 2015 22:06

Une alternative est d'utiliser une autre variable:

Code : Tout sélectionner

10:FOR A(27)=1 TO 26:A(A(27))=A(27):NEXT A(27)
Mais l'astuce de Charo est le mieux, surtout si Z reste à 26 en sortant de la boucle.
SHARP PC-1211 + CE-121 + CE-122. | VIC 20 Commodore 128D + Printer P-803 + SD2iec. | TI-57 LCD | HP-28S + HP82240A | TI-74 BasiCalc | HP-41C + (2 memory + stat + IR) | HP-15C | HP Prime Color Touchscreen Graphing Calculator| TI-92 II | CASIO fx-602p + FA-1 | HP-71B 64K+JPC-ROM+HPIL+card reader . Sommaire des M.P.O..

Avatar de l’utilisateur
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2498
Inscription : 03 mai 2008 15:33
Localisation : Grenoble

Re: [Challenge mono-ligne] Traitement chaine

Message par zpalm » 15 févr. 2015 22:41

Sur HP Prime:

Code : Tout sélectionner

EXPORT Prod(Str)
BEGIN
RETURN ΠLIST(EXECON("&1-64",ASC(Str)));
END;
Prod("ABCDEFGH") donne bien 40320, TEVAL(Prod("ABCDEGH")) retourne 0.002_s

Gilles59
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1428
Inscription : 27 oct. 2010 20:46

Re: [Challenge mono-ligne] Traitement chaine

Message par Gilles59 » 15 févr. 2015 23:07

zpalm a écrit :Sur HP Prime:

Code : Tout sélectionner

EXPORT Prod(Str)
BEGIN
RETURN ΠLIST(EXECON("&1-64",ASC(Str)));
END;
Prod("ABCDEFGH") donne bien 40320, TEVAL(Prod("ABCDEGH")) retourne 0.002_s
Ou plus simplement (mais on n'est pas sur un pocket des années 80)

Code : Tout sélectionner

EXPORT Prod(Str) BEGIN ΠLIST(ASC(Str)-64); END;
Equivalent RPL avec lalibrary Gofer (32,5 bytes)

Code : Tout sélectionner

« Chars  NUM 64 - Product »
L'astuce ¨PC1211 est top. Elle fonctionne aussi sur HP PRIME sous réserve qu'aucune variable correspondant à la chaine qu'on veut calculer n'existe.En effet la Prime interprète ABC comme A*B*C si ABC ou AB ou BC nexiste pas (perso je trouve que c'est surtout un nid à bug ce mode de fonctionnement)
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+

Avatar de l’utilisateur
babaorhum
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 452
Inscription : 13 janv. 2013 20:44
Localisation : Marseille-est

Re: [Challenge mono-ligne] Traitement chaine

Message par babaorhum » 15 févr. 2015 23:38

un petit essai timide en 12 pas sur HP42S (ou 41C) :

Code : Tout sélectionner

01  LBL"PROD"
02  1
03  AON
04  PROMPT
05  LBL 00
06  ATOX
07  X=0?
08  RTN
09  64
10   -
11   x
12   GTO 00

Pas de chrono mais ca va assez vite sur 42s !
BaBaoRhum
HP J728,200LX,1000CX,75C,71B, 48GX,42s,41CX,35s,32E,32Sii,28S,22s,21,16C,11C,12Cp
Sharp PC- E500,1600,1500,1350,1261,1245
Casio FX-502P,602p,850P,3900P,4000P
TI-74&92 ; Canon X-07 ; Panasonic HHC RL-H1400 ; TANDY EC-4026

Avatar de l’utilisateur
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2498
Inscription : 03 mai 2008 15:33
Localisation : Grenoble

Re: [Challenge mono-ligne] Traitement chaine

Message par zpalm » 16 févr. 2015 00:30

Gilles59 a écrit :Ou plus simplement (mais on n'est pas sur un pocket des années 80)

Code : Tout sélectionner

EXPORT Prod(Str) BEGIN ΠLIST(ASC(Str)-64); END;
C'est effectivement beaucoup plus simple ... :)

Répondre

Revenir vers « Tous les Pockets »