π
<-
Chat plein-écran
[^]

Optimisation programme TI-Basic

Optimisation programme TI-Basic

Message non lude Larwive » 22 Nov 2019, 19:06

Bonjour/Bonsoir,
j'ai créé un labyrinthe sur ma TI-83 Premium CE mais je trouve que c'est très lent.

Le principe du labyrinthe : On contrôle un "+" qui commence en haut à gauche et on doit le faire rejoindre le "=" en bas à droite.
Les murs (ou plutôt téléporteurs) sont invisibles jusqu'à qu'on se cogne contre eux. On est alors téléporté au tout début.

Voici le code :
Code: Tout sélectionner
0→K
EffÉcran
Output(1,1,"VERSION 1.01
Repeat K=105
getKey→K
End
EffÉcran
1→X:1→Y
1→A:1→B
Output(10,26,"=
Repeat (X=26 et Y=10) ou K=45
Output(A,B,"
Output(Y,X,"+
Y→A:X→B
getKey→K
X-(K=24)+(K=26)→X
Y-(K=25)+(K=34)→Y
If X=0:1→X
If X=27:26→X
If Y=0:1→Y
If Y=11:10→Y
If (Y=1 et (X=7 ou X=9 ou X=17)) ou (Y=2 et (X=5 ou X=7 ou X=9 ou X=11 ou X=14 ou X=16 ou X=18 ou X=19 ou X=20 ou X=23 ou X=25)) ou (Y=3 et (X=1 ou X=3 ou X=5 ou X=9 ou X=12 ou X=19 ou X=22)) ou (Y=4 et (X=5 ou X=6 ou X=8 ou X=11 ou X=16 ou X=23 ou X=24 ou X=25)) ou (Y=5 et (X=1 ou X=3 ou X=10 ou X=13 ou X=15 ou X=16 ou X=17 ou X=20 ou X=21 ou X=24)) ou (Y=6 et (X=1 ou X=4 ou X=6 ou X=10 ou X=11 ou X=17 ou X=24 ou X=26)) ou (Y=7 et (X=3 ou X=4 ou X=8 ou X=11 ou X=13 ou X=17 ou X=19 ou X=20 ou X=24)) ou (Y=8 et (X=1 ou X=7 ou X=13 ou X=15 ou X=17 ou X=21)) ou (Y=9 et (X=2 ou X=3 ou X=4 ou X=9 ou X=11 ou X=13 ou X=17 ou X=18 ou X=21 ou X=22 ou X=23 ou X=24 ou X=25)) ou (Y=10 et (X=6 ou X=11 ou X=13 ou X=15 ou X=18 ou X=19 ou X=25))
Then:Output(Y,X,"*
1→X
1→Y
End
End
EffÉcran
If X=26 et Y=10
Disp "GAGNÉ !


Mais c'était pire qu'avant car les parenthèses avec les Y=... étaient développées.

Donc j'aimerai savoir où est-ce qu'on pourrait encore gagner du temps d'exécution.
Je dis que je ne dis rien, à part que mes programmes sont disponibles ici. Image

En mettant à profit mes pouvoirs de devin, sachant que j'ai écrit ma signature bien avant ta venue, ton pseudo est Anonymous.:whistle:
Avatar de l’utilisateur
LarwiveProgrammeur
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 88.2%
 
Messages: 282
Images: 20
Inscription: 25 Oct 2018, 17:41
Localisation: Chez moi
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: 1ère année d'école d'ingénieur informatique
GitHub: Larwive

Re: Optimisation programme TI-Basic

Message non lude Wistaro » 22 Nov 2019, 19:46

Je pense que tu pourrais améliorer ton algorithme, tout simplement.
Tes if en masse doivent beaucoup ralentir le programme, essaye de trouver une solution pour t'en passer.
Nouveau sur le site, Anonymous ? Avant de poster sur le chat et sur le forum, n'oublie pas de lire les règles. En cas de problème, tu peux m'envoyer un message, je réponds rapidement.

Liens utiles:
Image
Découvre mes programmes et mon site!
Avatar de l’utilisateur
WistaroSuper Modo
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 88%
 
Messages: 3158
Images: 37
Inscription: 25 Fév 2013, 16:21
Localisation: Toulouse
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Ingénieur en électronique
YouTube: Wistaro
Twitter/X: Wistaro
GitHub: Wistaro

Re: Optimisation programme TI-Basic

Message non lude Larwive » 22 Nov 2019, 19:53

Mes If en masse... Tu veux dire les 5 If à la suite ou le gros If ?
Je dis que je ne dis rien, à part que mes programmes sont disponibles ici. Image

En mettant à profit mes pouvoirs de devin, sachant que j'ai écrit ma signature bien avant ta venue, ton pseudo est Anonymous.:whistle:
Avatar de l’utilisateur
LarwiveProgrammeur
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 88.2%
 
Messages: 282
Images: 20
Inscription: 25 Oct 2018, 17:41
Localisation: Chez moi
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: 1ère année d'école d'ingénieur informatique
GitHub: Larwive

Re: Optimisation programme TI-Basic

Message non lude Wistaro » 22 Nov 2019, 20:00

LePetitMage a écrit:Mes If en masse... Tu veux dire les 5 If à la suite ou le gros If ?


Le gros if
Nouveau sur le site, Anonymous ? Avant de poster sur le chat et sur le forum, n'oublie pas de lire les règles. En cas de problème, tu peux m'envoyer un message, je réponds rapidement.

Liens utiles:
Image
Découvre mes programmes et mon site!
Avatar de l’utilisateur
WistaroSuper Modo
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 88%
 
Messages: 3158
Images: 37
Inscription: 25 Fév 2013, 16:21
Localisation: Toulouse
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Ingénieur en électronique
YouTube: Wistaro
Twitter/X: Wistaro
GitHub: Wistaro

Re: Optimisation programme TI-Basic

Message non lude Larwive » 22 Nov 2019, 20:12

Du coup je ne vois pas de moyen de m'en passer.
Il faudra bien des If pour savoir si on se cogne contre un mur.
Je dis que je ne dis rien, à part que mes programmes sont disponibles ici. Image

En mettant à profit mes pouvoirs de devin, sachant que j'ai écrit ma signature bien avant ta venue, ton pseudo est Anonymous.:whistle:
Avatar de l’utilisateur
LarwiveProgrammeur
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 88.2%
 
Messages: 282
Images: 20
Inscription: 25 Oct 2018, 17:41
Localisation: Chez moi
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: 1ère année d'école d'ingénieur informatique
GitHub: Larwive

Re: Optimisation programme TI-Basic

Message non lude critor » 22 Nov 2019, 20:21

Projet intéressant. :)

Il faut réduire le nombre de lignes et le nombre de lignes compliquées dans la boucle.
Je vois que tu as utilisé une astuce pour les touches contrôlant X et Y. On peut également inclure le test des bornes sur la même ligne.

Et surtout, au lieu d'un énorme If on peut stocker ton labyrinthe sous forme de matrice (tableau de nombres).

Code: Tout sélectionner
[[0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0][0,0,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,1,1,0,0,1,0,1,0][1,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0][0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0][1,0,1,0,0,0,0,0,0,1,0,0,1,0,1,1,1,0,0,1,1,0,0,1,0,0][1,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1][0,0,1,1,0,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,0,0,0,1,0,0][1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,0,0][0,1,1,1,0,0,0,0,1,0,1,0,1,0,0,0,1,1,0,0,1,1,1,1,1,0][0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,0]]→[A]
0→K
EffÉcran
Output(1,1,"VERSION 1.01
Repeat getKey=105
End
EffÉcran
1→X:1→Y
1→A:1→B
Output(10,26,"=
Repeat (X=26 et Y=10) ou K=45
Output(A,B,"
Output(Y,X,"+
Y→A:X→B
getKey→K
max(1,min(26,X-(K=24)+(K=26→X
max(1,min(10,Y-(K=25)+(K=34→Y
If [A](Y,X
Then:Output(Y,X,"*
1→X
1→Y
End
End
EffÉcran
If X=26 et Y=10
Disp "GAGNÉ !
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 42.3%
 
Messages: 41496
Images: 14632
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: Optimisation programme TI-Basic

Message non lude Larwive » 22 Nov 2019, 20:28

Donc les 1 dans la matrice correspondent aux emplacements où il y a un obstacle et les 0 là où il n'y en a pas.

Sinon, que teste la ligne
Code: Tout sélectionner
If [A](Y,X
?

Anecdote : La version précédente de celle plus haut comptait 354 lignes et 85 If en tout.

La prochaine étape est de créer un labyrinthe avec des murs aléatoirement disposés.
Je dis que je ne dis rien, à part que mes programmes sont disponibles ici. Image

En mettant à profit mes pouvoirs de devin, sachant que j'ai écrit ma signature bien avant ta venue, ton pseudo est Anonymous.:whistle:
Avatar de l’utilisateur
LarwiveProgrammeur
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 88.2%
 
Messages: 282
Images: 20
Inscription: 25 Oct 2018, 17:41
Localisation: Chez moi
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: 1ère année d'école d'ingénieur informatique
GitHub: Larwive

Re: Optimisation programme TI-Basic

Message non lude critor » 22 Nov 2019, 20:35

LePetitMage a écrit:Donc les 1 dans la matrice correspondent aux emplacements où il y a un obstacle et les 0 là où il n'y en a pas.

Oui, mais tu es libre de faire autrement. :)

LePetitMage a écrit:Sinon, que teste la ligne
Code: Tout sélectionner
If [A](Y,X
?

Ecrit comme ça, le test est vrai pour toute valeur non nulle, donc notamment pour les 1.

LePetitMage a écrit:La prochaine étape est de créer un labyrinthe avec des murs aléatoirement disposés.

Ce qui est maintenant possible avec une matrice que tu peux faire remplir au programme comme tu veux. :)
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 42.3%
 
Messages: 41496
Images: 14632
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor


Retourner vers TI-Basic

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 16 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1235 utilisateurs:
>1208 invités
>23 membres
>4 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)