[Challenge mono-ligne] Traitement chaine
Modérateur : Politburo
- charognard
- Fonctionne à 9600 bauds
- Messages : 4412
- Enregistré le : 06 juin 2007 19:28
- Localisation : Indre et loire
- Contact :
[Challenge mono-ligne] Traitement chaine
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
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
-
- Fonctionne à 2400 bauds
- Messages : 2221
- Enregistré le : 13 mars 2006 15:39
- Localisation : Issy
- Contact :
Re: [Challenge mono-ligne] Traitement chaine
Code : Tout sélectionner
10 FOR I = 1 TO 26: A(I)=I: NEXT I
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
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store
- gege
- Fonctionne à 14400 bauds
- Messages : 7148
- Enregistré le : 31 janv. 2008 14:24
- Localisation : Banlieue Paârisienne
- Contact :
Re: [Challenge mono-ligne] Traitement chaine
Bonjour,
Magnifique !
Sur HP71B :46 octets, difficile à chronométrer car presque instantané...
G.E.
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
G.E.
Modifié en dernier par gege le 15 févr. 2015 20:26, modifié 1 fois.
- bernouilli92
- Fonctionne à 14400 bauds
- Messages : 5268
- Enregistré le : 21 nov. 2012 13:03
- Localisation : Ile de France
Re: [Challenge mono-ligne] Traitement chaine
@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
- charognard
- Fonctionne à 9600 bauds
- Messages : 4412
- Enregistré le : 06 juin 2007 19:28
- Localisation : Indre et loire
- Contact :
Re: [Challenge mono-ligne] Traitement chaine
Essai intéressantremy a écrit :ensuite en mode run il suffit de taper ABCDEFGH Entrée pour avoir le résultat.Code : Tout sélectionner
10 FOR I = 1 TO 26: A(I)=I: NEXT I
Sur un PC-1211 of course.
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à
FOR A(27)=1 TO 26:A(A(27))=A(27):NEXT A(27)
Modifié en dernier par charognard le 15 févr. 2015 20:46, modifié 1 fois.
-
- Fonctionne à 2400 bauds
- Messages : 2221
- Enregistré le : 13 mars 2006 15:39
- Localisation : Issy
- Contact :
Re: [Challenge mono-ligne] Traitement chaine
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
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store
- charognard
- Fonctionne à 9600 bauds
- Messages : 4412
- Enregistré le : 06 juin 2007 19:28
- Localisation : Indre et loire
- Contact :
Re: [Challenge mono-ligne] Traitement chaine
Avec Z ça peut le faire alorsremy 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
Modifié en dernier par charognard le 15 févr. 2015 20:56, modifié 2 fois.
-
- Fonctionne à 2400 bauds
- Messages : 2221
- Enregistré le : 13 mars 2006 15:39
- Localisation : Issy
- Contact :
Re: [Challenge mono-ligne] Traitement chaine
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
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store
- charognard
- Fonctionne à 9600 bauds
- Messages : 4412
- Enregistré le : 06 juin 2007 19:28
- Localisation : Indre et loire
- Contact :
Re: [Challenge mono-ligne] Traitement chaine
Code : Tout sélectionner
10 FOR Z = 1 TO 26: A(Z)=Z: NEXT Z
Z sort à 26 et non pas à 27 comme sur certain pockets
Modifié en dernier par charognard le 15 févr. 2015 22:38, modifié 1 fois.
-
- Fonctionne à 2400 bauds
- Messages : 2221
- Enregistré le : 13 mars 2006 15:39
- Localisation : Issy
- Contact :
Re: [Challenge mono-ligne] Traitement chaine
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
sur Windows, Linux, OS X et Android
Available now on the Google Play Store and the Apple Store
- C.Ret
- Fonctionne à 9600 bauds
- Messages : 3421
- Enregistré le : 31 mai 2008 23:43
- Localisation : N 49°22 E 6°10
Re: [Challenge mono-ligne] Traitement chaine
Une alternative est d'utiliser une autre variable:
Mais l'astuce de Charo est le mieux, surtout si Z reste à 26 en sortant de la boucle.
Code : Tout sélectionner
10:FOR A(27)=1 TO 26:A(A(27))=A(27):NEXT A(27)
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.
- zpalm
- Fonctionne à 9600 bauds
- Messages : 2934
- Enregistré le : 03 mai 2008 15:33
- Localisation : Grenoble
Re: [Challenge mono-ligne] Traitement chaine
Sur HP Prime:
Prod("ABCDEFGH") donne bien 40320, TEVAL(Prod("ABCDEGH")) retourne 0.002_s
Code : Tout sélectionner
EXPORT Prod(Str)
BEGIN
RETURN ΠLIST(EXECON("&1-64",ASC(Str)));
END;
Re: [Challenge mono-ligne] Traitement chaine
Ou plus simplement (mais on n'est pas sur un pocket des années 80)zpalm a écrit :Sur HP Prime:Prod("ABCDEFGH") donne bien 40320, TEVAL(Prod("ABCDEGH")) retourne 0.002_sCode : Tout sélectionner
EXPORT Prod(Str) BEGIN RETURN ΠLIST(EXECON("&1-64",ASC(Str))); END;
Code : Tout sélectionner
EXPORT Prod(Str) BEGIN ΠLIST(ASC(Str)-64); END;
Code : Tout sélectionner
« Chars NUM 64 - Product »
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
- babaorhum
- Fonctionne à 1200 bauds
- Messages : 454
- Enregistré le : 13 janv. 2013 19:44
- Localisation : Marseille-est
Re: [Challenge mono-ligne] Traitement chaine
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,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
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
- zpalm
- Fonctionne à 9600 bauds
- Messages : 2934
- Enregistré le : 03 mai 2008 15:33
- Localisation : Grenoble
Re: [Challenge mono-ligne] Traitement chaine
C'est effectivement beaucoup plus simple ...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;