[Challenge Mono-ligne] Calcul d'indice
Modérateur : Politburo
- charognard
- Fonctionne à 9600 bauds

- Messages : 4411
- Inscription : 06 juin 2007 19:28
- Localisation : Indre et loire
- Contact :
Re: [Challenge Mono-ligne] Calcul d'indice
Alors ça tient en 1 ligne ok
Mais si je tape ZZ ça me donne AA au lieu de AAA !
il manque un truc et là ça va être problématique pour la limitation à 80 octets
Au passage je subodore que tu l'as fais sur un G850 ou un truc comme cela car tu dépasse les 80 octets là (sans parler du -1 sur le true des tests booléens).
En 80 c'est tenable et en plus on peut aussi intégrer la gestion majuscules et les minuscules
Mais si je tape ZZ ça me donne AA au lieu de AAA !
il manque un truc et là ça va être problématique pour la limitation à 80 octets
Au passage je subodore que tu l'as fais sur un G850 ou un truc comme cela car tu dépasse les 80 octets là (sans parler du -1 sur le true des tests booléens).
En 80 c'est tenable et en plus on peut aussi intégrer la gestion majuscules et les minuscules
- zpalm
- Fonctionne à 9600 bauds

- Messages : 2498
- Inscription : 03 mai 2008 15:33
- Localisation : Grenoble
Re: [Challenge Mono-ligne] Calcul d'indice
Sur le PC-1403 je suis bloqué sur le NEXT, je n'arrive pas à entrer la fin de la ligne.gege a écrit : Ah OK j'ai compris !
Voici une solution :Code : Tout sélectionner
10 A=1:E$="":INPUT B$:FOR I=LEN(B$) TO 1 STEP -1:C=A+ASC MID$(B$,I,1):D=-(C>90):C=C-26*D:A=D:E$=(CHR$ C)+E$:NEXT I:PRINT E$:END
- gege
- Fonctionne à 14400 bauds

- Messages : 7180
- Inscription : 31 janv. 2008 15:24
- Localisation : Banlieue Paârisienne
- Contact :
Re: [Challenge Mono-ligne] Calcul d'indice
Bonjour,
Très très fort Monsieur Charo, c'est bien un G850 !
S ou V ??
Tu as bien raison, ajouter un "A" en cas de dépassement semble possible, mais le coup des 80 octets me semble en effet compliqué.
Ton challenge pourrait fièrement figurer parmi les MPO...
Je continue à chercher, et passe sur le 1500.
G.E.
EDIT : on peut un peu gratter avec :
EDIT 2 : Bon je n'avais pas lu les autres solutions, qui utilisent déjà ce principe, et contiennent le coup de la retenue ... 
Très très fort Monsieur Charo, c'est bien un G850 !
S ou V ??
Tu as bien raison, ajouter un "A" en cas de dépassement semble possible, mais le coup des 80 octets me semble en effet compliqué.
Ton challenge pourrait fièrement figurer parmi les MPO...
Je continue à chercher, et passe sur le 1500.
G.E.
EDIT : on peut un peu gratter avec :
Code : Tout sélectionner
10 A=1:E$="":INPUT B$:FOR I=LEN B$ TO 1 STEP -1:C=A+ASC MID$(B$,I,1):A=-(C>90):C=C-26*A:E$=CHR$ C+E$:NEXT I:PRINT E$
Dernière édition par gege le 13 févr. 2015 23:53, édité 4 fois.
- charognard
- Fonctionne à 9600 bauds

- Messages : 4411
- Inscription : 06 juin 2007 19:28
- Localisation : Indre et loire
- Contact :
Re: [Challenge Mono-ligne] Calcul d'indice
Attention le choix de la machine à son importance dans le challenge !
et Le 1500 ..... j'en ai trop dis
Sinon je dirais un G850V
et Le 1500 ..... j'en ai trop dis
Sinon je dirais un G850V
- gege
- Fonctionne à 14400 bauds

- Messages : 7180
- Inscription : 31 janv. 2008 15:24
- Localisation : Banlieue Paârisienne
- Contact :
Re: [Challenge Mono-ligne] Calcul d'indice
charognard a écrit :Sinon je dirais un G850V
Mais là c'est plutôt le moment de jouer au Loto
Héhé je parie sur le HP71B, qui permet d'accéder aux caractères en indiçant la chaîne.charognard a écrit :Attention le choix de la machine à son importance dans le challenge !
et Le 1500 ..... j'en ai trop dis
Alors, 1 partout
J'allume le 71...
G.E.
- charognard
- Fonctionne à 9600 bauds

- Messages : 4411
- Inscription : 06 juin 2007 19:28
- Localisation : Indre et loire
- Contact :
Re: [Challenge Mono-ligne] Calcul d'indice
Sur mon premier post je conseille sur SHARP
et mon programme fonctionne parfaitement sur SHARP (du moins certains) sans instructions paranormales
et mon programme fonctionne parfaitement sur SHARP (du moins certains) sans instructions paranormales
- Rom1500
- Fonctionne à 1200 bauds

- Messages : 701
- Inscription : 29 nov. 2013 17:24
- Localisation : Pas très loin de Lyon
- Contact :
Re: [Challenge Mono-ligne] Calcul d'indice
Ca ne rentre toujours pas sur une ligne… ARGH !
10:CLEAR :R=1:INPUT A$:FOR I=LEN A$TO 1STEP -1
20:A=R+ASC MID$ (A$,I,1):R=A>90:B$=CHR$ ((I=1)*R*65)+CHR$ (A-26*R)+B$:NEXT I:BEEP 1:PRINT I;
Mais ça ajoute bien une lettre au début en cas de dépassement.
D'ailleurs elle ne peut être ajoutée qu'au début… d'où CHR$ ((I=1)*R*65)
10:CLEAR :R=1:INPUT A$:FOR I=LEN A$TO 1STEP -1
20:A=R+ASC MID$ (A$,I,1):R=A>90:B$=CHR$ ((I=1)*R*65)+CHR$ (A-26*R)+B$:NEXT I:BEEP 1:PRINT I;
Mais ça ajoute bien une lettre au début en cas de dépassement.
D'ailleurs elle ne peut être ajoutée qu'au début… d'où CHR$ ((I=1)*R*65)
Dernière édition par Rom1500 le 14 févr. 2015 17:36, édité 1 fois.
Toutes les infos : http://www.pc-1500.info
PC-1500+CE-150 : EU PC1500, PC1500A / JP PC1500, PC1500D, PC1501 / HU PTA4000, PTA4000+16 / US TRS80 PC2 / BR PC-1500RP, PC-1500RP2 / CN PC-1500, PC-1500A, Nanfeng PC-1500A
PC-1600 : PC-1600K V2, CE-1600M, CE-1604L, CE-515P, module 32Ko, module 512Ko
Extensions en boite : CE-150/151/152/153/154/155/156/157/158/159/160/161/162E/163 sans boite
PC-1500+CE-150 : EU PC1500, PC1500A / JP PC1500, PC1500D, PC1501 / HU PTA4000, PTA4000+16 / US TRS80 PC2 / BR PC-1500RP, PC-1500RP2 / CN PC-1500, PC-1500A, Nanfeng PC-1500A
PC-1600 : PC-1600K V2, CE-1600M, CE-1604L, CE-515P, module 32Ko, module 512Ko
Extensions en boite : CE-150/151/152/153/154/155/156/157/158/159/160/161/162E/163 sans boite
-
cgh
- Fonctionne à 2400 bauds

- Messages : 2288
- Inscription : 30 août 2011 12:23
- Localisation : Vous êtes ici -> .
Re: [Challenge Mono-ligne] Calcul d'indice
Bon, cela m'apprendras a pas lire l'enonce jusqu'au bout 
Le programme corrige:
Le source est relogeable n'importe ou. Ci-dessous liste avec les POKE pour etre implante en &40C5 (tous PC).
La checksum du code LM est &15B4.
En mode PRO faire:
Le tout en 79 octets avec le petit programme BASIC. La routine LM ne fait que 51 octets !
On peut l'appeler directement en faisant:
Par exemple:
Le programme corrige:
Code : Tout sélectionner
.CODE
PUSH BC
LD L,00
strlen:
LDI (BC)
JR Z,endlen
INC L
JR strlen
endlen:
LDA L
JR Z,exitNONE
PUSH HL
DEC BC
PUSH BC
DEC BC
DEC L
loop:
LDA (BC)
CPA $Z
JR NZ,add+1
LDA $@
add+1:
INC A
STD (BC)
CPA $A
JR NZ,endloop
DJC loop
endloop:
POP BC
POP HL
CPA $A
JR NZ,exitNONE
INC L
STI (BC)
exitNONE:
AND (BC),00
SCF
POP BC
RET
.END
Code : Tout sélectionner
POKE &40C5,&FD,&88,&6A,&00,&45,&8B,&03,&60,&9E,&06,&24,&8B,&20,&FD,&A8,&46
POKE &40D5,&FD,&88,&46,&62,&05,&B7,&5A,&89,&02,&B5,&40,&DD,&43,&B7,&41,&89
POKE &40E5,&02,&88,&0F,&FD,&0A,&FD,&2A,&B7,&41,&89,&02,&60,&41,&49,&00,&FB
POKE &40F5,&FD,&0A,&9AEn mode PRO faire:
Code : Tout sélectionner
NEW &40F8
10 INPUT A$:CALL &40C5,A$:PRINT A$:ENDOn peut l'appeler directement en faisant:
Code : Tout sélectionner
<var$>="votre chaine"
CALL &40C5,<var$>
<var$>Code : Tout sélectionner
C$="AYZZ"
CALL &40C5,C$
C$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
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
- charognard
- Fonctionne à 9600 bauds

- Messages : 4411
- Inscription : 06 juin 2007 19:28
- Localisation : Indre et loire
- Contact :
Re: [Challenge Mono-ligne] Calcul d'indice
Tu as encore mal lu !
Dans le premier post
Pour info d'ailleurs le CALL du PC1600 permet directement le passage d'une variable avec le CALL (Voir page 146 du manuel)
Avec, pour les variables alpha, dans DE le pointeur
et dans B la longueur
De cette façon on peut faire plus court.
Exemple : Call &adr,var
Dans le premier post
Parce que en assembleur il n'y a pas de difficulté en fait.Faire un programme en BASIC sur ordinateur...
Pour info d'ailleurs le CALL du PC1600 permet directement le passage d'une variable avec le CALL (Voir page 146 du manuel)
Avec, pour les variables alpha, dans DE le pointeur
et dans B la longueur
De cette façon on peut faire plus court.
Exemple : Call &adr,var
Dernière édition par charognard le 14 févr. 2015 16:49, édité 2 fois.
-
cgh
- Fonctionne à 2400 bauds

- Messages : 2288
- Inscription : 30 août 2011 12:23
- Localisation : Vous êtes ici -> .
Re: [Challenge Mono-ligne] Calcul d'indice
Il y est !!!! Et il est certainement le plus rapide...charognard a écrit :Tu as encore mal lu !
Dans le premier postFaire un programme en BASIC sur ordinateur...
Code : Tout sélectionner
10 INPUT A$:CALL &40C5,A$:PRINT A$:ENDIl 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
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
- charognard
- Fonctionne à 9600 bauds

- Messages : 4411
- Inscription : 06 juin 2007 19:28
- Localisation : Indre et loire
- Contact :
Re: [Challenge Mono-ligne] Calcul d'indice
De plus à la lecture j'ai l'impression que ZZ ne donne pas AAA!
Me tromperais-je ?
Me tromperais-je ?
-
cgh
- Fonctionne à 2400 bauds

- Messages : 2288
- Inscription : 30 août 2011 12:23
- Localisation : Vous êtes ici -> .
Re: [Challenge Mono-ligne] Calcul d'indice
Oui. Avec "ZZ" on obtient bien "AAA"charognard a écrit :De plus à la lecture j'ai l'impression que ZZ ne donne pas AAA!
Me tromperais-je ?
C'est sur PC1500. On peut aussi passer une variable a CALL avec CALL adr,var. L'adresse de la variable en est BC (X) et la longueur maximum est en A. Mais je doit calculer la longueur reelle.
Le code assembleur n'est pas obtimise.
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
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
- charognard
- Fonctionne à 9600 bauds

- Messages : 4411
- Inscription : 06 juin 2007 19:28
- Localisation : Indre et loire
- Contact :
Re: [Challenge Mono-ligne] Calcul d'indice
Pas mal, il y a même le BEEP, mais c'est en 2 lignesRom1500 a écrit :Ca ne rentre toujours pas sur une ligne… ARGH !![]()
10:CLEAR :R=1:INPUT A$:FOR I=LEN A$TO 1STEP -1
20:A=R+ASC MID$ (A$,I,1):R=A>90:B$=CHR$ ((I=1)*R*65)+CHR$ (A-26*R)+B$:NEXT I:BEEP 1:PRINT I;
Mais ça ajoute bien une lettre au début en cas de dépassement.
D'ailleurs elle ne peut être ajoutée qu'au début… d'où CHR$ ((I=1)*R*65)
J'arrive même a gérer le majuscule/minuscule en 1 LIGNE (Mais sans le BEEP dans ce cas)
- C.Ret
- Fonctionne à 9600 bauds

- Messages : 2483
- Inscription : 31 mai 2008 23:43
- Localisation : N 49°22 E 6°10
Re: [Challenge Mono-ligne] Calcul d'indice
Juste une petite question.
Si j'entre AZ, la réponse attendue est BA ?
En attendant la version pour Ordinateur de Poche, voici celle pour Commodore C128D:
Le problème est de mettre le C128D dans ma poche.
En attendant, une version pour Pocket; mais elle fait plus de 80 car.
Si j'entre AZ, la réponse attendue est BA ?
En attendant la version pour Ordinateur de Poche, voici celle pour Commodore C128D:
Code : Tout sélectionner
Octets: 1 2 3 4 5 6 7 8
3 4 5678901234 5678 90 12345678901234567890123 45678 901 2345678901234 567890123456789 0 123 456789
1 input a$:b$="":do:c=asc(right$("@"+a$,1)):f=c=90:a$=left$(a$,abs((len(a$)-1)):b$=chr$(1+c+26*f)+b$:loop while f:print a$;b$En attendant, une version pour Pocket; mais elle fait plus de 80 car.
Code : Tout sélectionner
Octets: 1 2 4 5 6 7 8 9
3 4 5 6 789 0 123 4 56 789 0 1234567890 1234 567 8901 2345 67 8901234 5678 90123456789012 3 45 6 78 9 0123456
1 CLEAR : INPUT A$: FOR F=0 TO 1: C=ASC RIGHT$("@"+A$,1): F=C<>90: A$=LEFT$(A$,ABS (LEN A$-1)): B$=CHR$(C+26*F-25)+B$: NEXT F: BEEP 1: PRINT A$;B$:END
Dernière édition par C.Ret le 15 févr. 2015 00:54, édité 5 fois.
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..
-
remy
- Fonctionne à 2400 bauds

- Messages : 2086
- Inscription : 13 mars 2006 16:39
- Localisation : Issy
- Contact :
Re: [Challenge Mono-ligne] Calcul d'indice
Je pense que le
peut être remplacé par un
on gagne quelques octets
Code : Tout sélectionner
FOR I=LEN A$TO 1STEP -1
... ASC MID$ (A$,I,1)Code : Tout sélectionner
FOR I=1 TO LEN A$
... ASC RIGHT$(A$,I)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




