[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 du membre
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4412
Enregistré le : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

[Challenge mono-ligne] Traitement chaine

Message par charognard »

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 : 2221
Enregistré le : 13 mars 2006 15:39
Localisation : Issy
Contact :

Re: [Challenge mono-ligne] Traitement chaine

Message par remy »

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 du membre
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7148
Enregistré le : 31 janv. 2008 14:24
Localisation : Banlieue Paârisienne
Contact :

Re: [Challenge mono-ligne] Traitement chaine

Message par gege »

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.
Modifié en dernier par gege le 15 févr. 2015 20:26, modifié 1 fois.
Avatar du membre
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5268
Enregistré le : 21 nov. 2012 13:03
Localisation : Ile de France

Re: [Challenge mono-ligne] Traitement chaine

Message par bernouilli92 »

@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 du membre
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4412
Enregistré le : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: [Challenge mono-ligne] Traitement chaine

Message par charognard »

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)
Modifié en dernier par charognard le 15 févr. 2015 20:46, modifié 1 fois.
remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2221
Enregistré le : 13 mars 2006 15:39
Localisation : Issy
Contact :

Re: [Challenge mono-ligne] Traitement chaine

Message par remy »

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 du membre
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4412
Enregistré le : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: [Challenge mono-ligne] Traitement chaine

Message par charognard »

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
Modifié en dernier par charognard le 15 févr. 2015 20:56, modifié 2 fois.
remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2221
Enregistré le : 13 mars 2006 15:39
Localisation : Issy
Contact :

Re: [Challenge mono-ligne] Traitement chaine

Message par remy »

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 du membre
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4412
Enregistré le : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: [Challenge mono-ligne] Traitement chaine

Message par charognard »

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
Modifié en dernier par charognard le 15 févr. 2015 22:38, modifié 1 fois.
remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2221
Enregistré le : 13 mars 2006 15:39
Localisation : Issy
Contact :

Re: [Challenge mono-ligne] Traitement chaine

Message par remy »

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 du membre
C.Ret
Fonctionne à 9600 bauds
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

Message par C.Ret »

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 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 : 2934
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: [Challenge mono-ligne] Traitement chaine

Message par zpalm »

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 : 1602
Enregistré le : 27 oct. 2010 20:46

Re: [Challenge mono-ligne] Traitement chaine

Message par Gilles59 »

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+ CM14 et MM12 / Alice 32
Avatar du membre
babaorhum
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 454
Enregistré le : 13 janv. 2013 19:44
Localisation : Marseille-est

Re: [Challenge mono-ligne] Traitement chaine

Message par babaorhum »

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
Avatar du membre
zpalm
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2934
Enregistré le : 03 mai 2008 15:33
Localisation : Grenoble

Re: [Challenge mono-ligne] Traitement chaine

Message par zpalm »

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

Retourner vers « Tous les Pockets »