π
<-
Chat plein-écran
[^]

Optimisation programme TI-Basic

Optimisation programme TI-Basic

Unread postby LePetitMage » 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: Select all
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.
User avatar
LePetitMagePremium
Niveau 10: GR (Guide de Référence)
Niveau 10: GR (Guide de Référence)
Level up: 91.8%
 
Posts: 125
Joined: 25 Oct 2018, 17:41
Location: Chez moi
Gender: Male
Calculator(s):
Class: TS

Re: Optimisation programme TI-Basic

Unread postby 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 . 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!
User avatar
WistaroModo.G
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 61.1%
 
Posts: 2872
Images: 37
Joined: 25 Feb 2013, 16:21
Location: Toulouse
Gender: Male
Calculator(s):
Class: Etudiant ingénieur (dernière année)
YouTube: Wistaro
Twitter: Wistaro
GitHub: Wistaro

Re: Optimisation programme TI-Basic

Unread postby LePetitMage » 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.
User avatar
LePetitMagePremium
Niveau 10: GR (Guide de Référence)
Niveau 10: GR (Guide de Référence)
Level up: 91.8%
 
Posts: 125
Joined: 25 Oct 2018, 17:41
Location: Chez moi
Gender: Male
Calculator(s):
Class: TS

Re: Optimisation programme TI-Basic

Unread postby Wistaro » 22 Nov 2019, 20:00

LePetitMage wrote: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 . 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!
User avatar
WistaroModo.G
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 61.1%
 
Posts: 2872
Images: 37
Joined: 25 Feb 2013, 16:21
Location: Toulouse
Gender: Male
Calculator(s):
Class: Etudiant ingénieur (dernière année)
YouTube: Wistaro
Twitter: Wistaro
GitHub: Wistaro

Re: Optimisation programme TI-Basic

Unread postby LePetitMage » 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.
User avatar
LePetitMagePremium
Niveau 10: GR (Guide de Référence)
Niveau 10: GR (Guide de Référence)
Level up: 91.8%
 
Posts: 125
Joined: 25 Oct 2018, 17:41
Location: Chez moi
Gender: Male
Calculator(s):
Class: TS

Online

Re: Optimisation programme TI-Basic

Unread postby 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: Select all
[[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
User avatar
critorAdmin.
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 0.2%
 
Posts: 34230
Images: 8866
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
Class: Lycée
YouTube: critor3000
Twitter: critor2000
Facebook: critor.ti

Re: Optimisation programme TI-Basic

Unread postby LePetitMage » 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: Select all
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.
User avatar
LePetitMagePremium
Niveau 10: GR (Guide de Référence)
Niveau 10: GR (Guide de Référence)
Level up: 91.8%
 
Posts: 125
Joined: 25 Oct 2018, 17:41
Location: Chez moi
Gender: Male
Calculator(s):
Class: TS

Online

Re: Optimisation programme TI-Basic

Unread postby critor » 22 Nov 2019, 20:35

LePetitMage wrote: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 wrote:Sinon, que teste la ligne
Code: Select all
If [A](Y,X
?

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

LePetitMage wrote: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
User avatar
critorAdmin.
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 0.2%
 
Posts: 34230
Images: 8866
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
Class: Lycée
YouTube: critor3000
Twitter: critor2000
Facebook: critor.ti


Return to TI-Basic

Who is online

Users browsing this forum: No registered users and 3 guests

-
Search
-
Featured topics
Omega, le fork étendant les capacités de ta NumWorks, même en mode examen !
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Concours TI-Planet-Casio de rentrée 2019. 3 défis pour plus d'une 15aine de calculatrices graphiques et nombre de goodies sortant de l'ordinaire ! :D
123
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...

Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety 
-
Stats.
691 utilisateurs:
>636 invités
>50 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)