Poster un nouveau sujet Poster une réponse
Roulette Russe
Auteur Message
Homer_Dalor



Autorisation : Membre
Nb de messages : 33
Inscrit le : Sam 22 Avr 2017, 16:00
Posté le : Sam 13 Mai 2017, 13:55   Citer 

Bonjour les gens.

Une roulette russe où on choisit le nombre de balles dans le barillet, une animation à chier parce que flemme, une étoile c'est une balle, un O, c'est vide, si la forme en haut est une étoile, vous êtes mort.


Code
:Lbl M
:Menu("ROUL. RUSSE","JOUER",J,"QUITTER",Q
:Lbl J
:EffEcr
:Disp "****************
:Output(3,5,"COMBIEN
:Output(4,8,"DE
:Output(5,5,"BALLES ?
:Output(8,1,"****************
:Output(6,7,"< >
:3->A
:Repeat K=45 ou K=105
:codeTouche->K
:min(6,max(1,A+(K=26)-(K=24->A
:Output(6,8,A
:End
:If K=45:Goto M
:{1,2,3,4,5,6->L1
:{0,0,0,0,0,0->L2
:For(B,1,A
:EntAléat(B,6->C
:0->L1(C
:TriCroi(L1
:End
:" ->Chaîne1
:For(F,1,6
:Chaîne1+sous-Chaîne("*0",somme(L1=F)+1,1->Chaîne1
:End
:EffEcr
:sous-Chaîne(Chaîne1,2,longueur(Chaîne1)-1->Chaîne1
:For(F,1,40
:sous-Chaîne(Chaîne1,2,longueur(Chaîne1)-1)+sous-Chaîne(Chaîne1,1,1->Chaîne1
:For(G,1,3
:Output(1+2G,8-2(G>1),sous-Chaîne(Chaîne1,G,1
:Output(7-2G,10-2(G=1),sous-Chaîne(Chaîne1,G+3,1
:End
:For(G,1,e^(F/7
:End
:End
:If sous-Chaîne(Chaîne1,1,1="*
:Then
:Output(4,4,"YOU'RE DEAD
:Else
:Output(4,3,"T'AS EU CHAUD
:End
:Pause
:Goto M
:Lbl Q
:EffEcr



Vous allez sûrement vous dire "Tu t'es fait chier pour rien avec tes chaînes", je vous répondrai "oui, mais j'aime bien".
Bisous ! <3

 Adresse email Haut de page Bas de page 
 
Mingerton



Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
Posté le : Sam 13 Mai 2017, 15:15   Citer 

De l'optimisation à la con parce que vraiment pas grand chose à redire sinon :


Code
:{1,2,3,4,5,6->L1
:{0,0,0,0,0,0->L2


Devient :

Code
:suite(X,X,1,6->L1
:6->dim(L2
:Remplir(0,L2





Code
:For(B,1,A
:EntAléat(B,6->C
:0->L1(C
:TriCroi(L1
:End


Devient :

Code
:For(B,1,A
:0->L1(EntAléat(B,6
:TriCroi(L1
:End




Le code des chaînes est bien maîtrisé. Bonne idée le ralentissement progressif grâce à une boucle For, bien plus pratique que des 69! enchaînés dans ce cas.

Juste une remarque, tu ne peux pas enlever la parenthèse dans ce cas là :

Code
:If sous-Chaîne(Chaîne1,1,1="*


Donc on fait :

Code
:If sous-Chaîne(Chaîne1,1,1)="*



Après c'est vrai qu'il est pas très joli mais sur l'écran numérique y a pas grand chose qu'on puisse faire de joli winkle.gif.

----------------------
Mes articles
Mes programmes en ligne (je termine peu de projets)

Guide traduction Algo-Basic, par Linkakro
Catalogue des fonctions 82/83/84 FR/EN
 Adresse email Haut de page Bas de page 
 
Ruadh



Autorisation : Membre
Nb de messages : 30
Inscrit le : Ven 06 Nov 2015, 14:08
Posté le : Sam 13 Mai 2017, 19:27   Citer 


Code
:sous-Chaîne(Chaîne1,2,longueur(Chaîne1)-1->Chaîne1
[...]
:sous-Chaîne(Chaîne1,2,longueur(Chaîne1)-1)+sous-Chaîne(Chaîne1,1,1->Chaîne1



La longueur de la chaîne est toujours la même à ces lignes, elle est de 7 pour la première et de 6 pour la deuxième.
Tu peux donc remplacer ces deux lignes par :


Code
:sous-Chaîne(Chaîne1,2,6->Chaîne1
[...]
:sous-Chaîne(Chaîne1,2,5)+sous-Chaîne(Chaîne1,1,1->Chaîne1




Code
:Disp "****************
:Output(3,5,"COMBIEN
:Output(4,8,"DE
:Output(5,5,"BALLES ?
:Output(8,1,"****************



Devient :


Code
:"****************
:Disp Rép
:Output(3,5,"COMBIEN
:Output(4,8,"DE
:Output(5,5,"BALLES ?
:Output(8,1,Rép



 Adresse email Haut de page Bas de page 
 
m@thieu41



Autorisation : Membre
Nb de messages : 856
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Sam 13 Mai 2017, 22:15   Citer 


Citer : Mingerton
De l'optimisation à la con parce que vraiment pas grand chose à redire sinon :


Code
:{1,2,3,4,5,6->L1
:{0,0,0,0,0,0->L2


Devient :

Code
:suite(X,X,1,6->L1
:6->dim(L2
:Remplir(0,L2




Et même:

Code
:suite(X,X,1,6->L1
:DelVar L26->dim(L2



Ou carrément:

Code
:suite(X,X,1,6->L1
:0L1->L2



Mais... à quoi te sert L2 ?

**************************************


Code
:For(B,1,A
:EntAléat(B,6->C
:0->L1(C
:TriCroi(L1
:End
:" ->Chaîne1
:For(F,1,6
:Chaîne1+sous-Chaîne("*0",somme(L1=F)+1,1->Chaîne1
:End



Devient:


Code
:EntAléat(0,9,6->L2
:suite(X<=A,X,1,6
:TriCroi(L1,L2
:"
:For(F,1,6
:Rép+sous-Chaîne("*0",1+L1(F),1->Chaîne1
:End



***********************

On peu aussi utiliser Rép tout du long, sans jamais stocker la chaine dans chaine1.

**************************

Code
:If sous-Chaîne(Chaîne1,1,1="*
:Then
:Output(4,4,"YOU'RE DEAD
:Else
:Output(4,3,"T'AS EU CHAUD
:End



devient:


Code
:"T'AS EU CHAUD
:If sous-Chaîne(Chaîne1,1,1="*
:" YOU'RE DEAD
:Output(4,3,Rép



****************************

[spoiler]C'est bizarre ton histoire de chaines :p[/spoiler]

----------------------
Pour vous aidez dans vos débuts (et même ensuite ^^) :
*Tuto Algo->Ti Basic (par Linkakro) : Traduisez vos algo (de type algobox) en prgm pour votre TI!
*Catalogue des emplacements et traductions (anglais/français) des fonctions sur la TI.
*Faites vos propres programmes de maths (par ash)

Et au fait: la politesse n'a jamais tué personne winkle.gif
 Adresse email Haut de page Bas de page 
 
Homer_Dalor



Autorisation : Membre
Nb de messages : 33
Inscrit le : Sam 22 Avr 2017, 16:00
Posté le : Sam 13 Mai 2017, 22:48   Citer 

Merci pour vos réponses :3

Effectivement, L2 ne sert à rien, j'avais essayé plusieurs solutions auparavant et elle m'était utile à ce moment là, j'ai oublié de l'enlever ^^

Et en quoi c'est bizarre mon histoire de chaîne? cry.gif

Sinon, je sais pas si c'est moi mais


Citer



Code
:For(B,1,A
:EntAléat(B,6->C
:0->L1(C
:TriCroi(L1
:End
:" ->Chaîne1
:For(F,1,6
:Chaîne1+sous-Chaîne("*0",somme(L1=F)+1,1->Chaîne1
:End





Devient:




Code
:EntAléat(0,9,6->L2
:suite(X<=A,X,1,6
:TriCroi(L1,L2
:"
:For(F,1,6
:Rép+sous-Chaîne("*0",1+L1(F),1->Chaîne1
:End





Je comprend pas les trois premières lignes notgood.gif

 Adresse email Haut de page Bas de page 
 
Mingerton



Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
Posté le : Dim 14 Mai 2017, 0:40   Citer 

Bien vu m@thieu41 ! Effectivement un Ans passe tout seul sur tout le code j'avais pas remarqué.

Pour les trois lignes qui te posent problème :
- EntAleat peut prendre un troisième argument, qui est la longueur d'une liste. On aura alors une liste de nombres aléatoires
- Une autre utilisation du suite() : remplira avec les X croissants tant que X<=A. On se passe là aussi de la boucle
- TriCroi prend autant de listes que voulues en argument

Soyons fous pour la première ligne :

Code
:EntAléat(0,9,6->L2

//Devient :

:partEnt(10NbrAléat(6->L2



----------------------
Mes articles
Mes programmes en ligne (je termine peu de projets)

Guide traduction Algo-Basic, par Linkakro
Catalogue des fonctions 82/83/84 FR/EN
 Adresse email Haut de page Bas de page 
 
Homer_Dalor



Autorisation : Membre
Nb de messages : 33
Inscrit le : Sam 22 Avr 2017, 16:00
Posté le : Dim 14 Mai 2017, 1:23   Citer 

En testant, pour suite(X<=A,X,1,6) j'obtient {1,1,0,0,0,0} si A=2 par exemple, ça me paraît logique. Pour le EntAleat, on se retrouve avec 6 valeurs de 1 à 9. Ce que je ne comprend pas,c'est en quoi ça remplace mon code.

Avec ce que j'ai écris, on se retrouve avec A fois 0 puis 6-A fois des valeurs entre 1 et 6 sans doublons dans L1.

Ici on se retrouve avec deux listes qui n'ont rien à voir. notgood.gif

 Adresse email Haut de page Bas de page 
 
Mingerton



Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
Posté le : Dim 14 Mai 2017, 2:22   Citer 

Pour l'utilisation du TriCroi à plusieurs listes : ca ne trie pas chacune des listes mais seulement la première, et ensuite réarrange les suivantes de manière à ce que les éléments qui étaient à la même place le soient encore. Je m'explique :

Code
{6,5,1,2,4,3->L1
{7,0,2,1,6,4->L2

TriCroi(L1,L2

//On obtient alors :

L1={1,2,3,4,5,6}
L2={2,1,4,6,0,7}



Je pense que ce qu'a essayé de faire m@thieu c'est un code de rand sans répétition, mais en effet quelque chose ne va pas. Déjà le TriCroi est ici mal utilisé il me semble, on trie la mauvaise liste. Et il doit manquer une ligne, le but doit être de multiplier par cette liste de 0 et de 1 par la suite pour éliminer les valeurs mauvaises.

Je propose le correctif suivant :

Code
NbrAléat(6->L2
TriCroi(L2,L1
L1suite(X>A,X,1,6->L1



Noter que la liste L1 n'est pas triée, on doit rajouter un tri si on veut forcément qu'elle soit triée dans la suite

----------------------
Mes articles
Mes programmes en ligne (je termine peu de projets)

Guide traduction Algo-Basic, par Linkakro
Catalogue des fonctions 82/83/84 FR/EN
 Adresse email Haut de page Bas de page 
 
Homer_Dalor



Autorisation : Membre
Nb de messages : 33
Inscrit le : Sam 22 Avr 2017, 16:00
Posté le : Dim 14 Mai 2017, 3:24   Citer 

Je ne suis donc pas fou ! \o/

Ta méthode est bonne, et pas besoin de trier la liste pour la suite du programme bigmouth.gif

Voici le programme avec vos améliorations <3



Code
:Lbl M
:Menu("ROUL. RUSSE","JOUER",J,"QUITTER",Q
:Lbl J
:EffEcr
:"****************
:Disp Rép
:Output(3,5,"COMBIEN
:Output(4,8,"DE
:Output(5,5,"BALLES ?
:Output(8,1,Rép
:Output(6,7,"< >
:3->A
:Repeat K=45 ou K=105
:codeTouche->K
:min(6,max(1,A+(K=26)-(K=24->A
:Output(6,8,A
:End
:If K=45:Goto M
:suite(X,X,1,6->L1
:NbrAléat(6->L2
:TriCroi(L2,L1
:L1suite(X>A,X,1,6->L1
:"
:For(F,1,6
:Rép+sous-Chaîne("*0",somme(L1=F)+1,1
:End
:EffEcr
:sous-Chaîne(Rép,2,6
:For(F,1,40
:sous-Chaîne(Rép,2,5)+sous-Chaîne(Rép,1,1
:For(G,1,3
:Output(-1+2G,8-2(G>1),sous-Chaîne(Rép,G,1
:Output(9-2G,10-2(G=1),sous-Chaîne(Rép,G+3,1
:End
:For(G,1,e^(F/7
:End
:End
:sous-Chaîne(Rép,1,1)="*->Y
:"T'AS EU CHAUD
:If Y
:" YOU'RE DEAD
:Output(4,3,Rép
:Pause
:Goto M
:Lbl Q
:EffEcr



 Adresse email Haut de page Bas de page 
 
Mingerton



Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
Posté le : Dim 14 Mai 2017, 20:05   Citer 

Du coup on garde quand même le

Code
{1,2,3,4,5,6->L1
//Devient :
suite(X,X,1,6->L1



Pourquoi stocker la variable Y ?


Code
:sous-Chaîne(Rép,1,1)="*->Y
:"T'AS EU CHAUD
:If Y
:" YOU'RE DEAD

//Devient  :

:"T'AS EU CHAUD
:If sous-Chaîne(Rép,1,1)="*
:" YOU'RE DEAD



----------------------
Mes articles
Mes programmes en ligne (je termine peu de projets)

Guide traduction Algo-Basic, par Linkakro
Catalogue des fonctions 82/83/84 FR/EN
 Adresse email Haut de page Bas de page 
 
Homer_Dalor



Autorisation : Membre
Nb de messages : 33
Inscrit le : Sam 22 Avr 2017, 16:00
Posté le : Dim 14 Mai 2017, 20:16   Citer 

Non, Rép devient "T'AS EU CHAUD" à la ligne d'avant, ça ne marche plus notgood.gif

J'ai modifié mon post pour L1 :3

 Adresse email Haut de page Bas de page 
 
Mingerton



Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
Posté le : Dim 14 Mai 2017, 21:08   Citer 

Ah oui, j'ai optimisé trop vite ^^

----------------------
Mes articles
Mes programmes en ligne (je termine peu de projets)

Guide traduction Algo-Basic, par Linkakro
Catalogue des fonctions 82/83/84 FR/EN
 Adresse email Haut de page Bas de page 
 
Paulo1026



Autorisation : Membre
Nb de messages : 128
Inscrit le : Ven 06 Nov 2015, 19:22
Posté le : Lun 15 Mai 2017, 19:46   Citer 

Tou82 ressort de sa tombe ^^ 10 postes en 2 jours sur le même sujet bigmouth.gif

 Adresse email Haut de page Bas de page 
 
Mingerton



Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
Posté le : Lun 15 Mai 2017, 21:54   Citer 

Ah ba quand un bon programme sort c'est toujours un plaisir de l'améliorer winkle.gif

----------------------
Mes articles
Mes programmes en ligne (je termine peu de projets)

Guide traduction Algo-Basic, par Linkakro
Catalogue des fonctions 82/83/84 FR/EN
 Adresse email Haut de page Bas de page 
 
m@thieu41



Autorisation : Membre
Nb de messages : 856
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Mar 16 Mai 2017, 15:56   Citer 


Citer : Mingerton
Pour l'utilisation du TriCroi à plusieurs listes : ca ne trie pas chacune des listes mais seulement la première, et ensuite réarrange les suivantes de manière à ce que les éléments qui étaient à la même place le soient encore. Je m'explique :

Code
{6,5,1,2,4,3->L1
{7,0,2,1,6,4->L2

TriCroi(L1,L2

//On obtient alors :

L1={1,2,3,4,5,6}
L2={2,1,4,6,0,7}



Je pense que ce qu'a essayé de faire m@thieu c'est un code de rand sans répétition, mais en effet quelque chose ne va pas. Déjà le TriCroi est ici mal utilisé il me semble, on trie la mauvaise liste. Et il doit manquer une ligne, le but doit être de multiplier par cette liste de 0 et de 1 par la suite pour éliminer les valeurs mauvaises.

Je propose le correctif suivant :

Code
NbrAléat(6->L2
TriCroi(L2,L1
L1suite(X>A,X,1,6->L1



Noter que la liste L1 n'est pas triée, on doit rajouter un tri si on veut forcément qu'elle soit triée dans la suite




Ouais j'ai chibré crazy.gif

Je pense plutôt aux 3 lignes suivantes, sinon on a pas le bon nombre de balles si ?


Code
NbrAléat(6->L2
suite(X<=A,X,1,6->L1
TriCroi(L2,L1



----------------------
Pour vous aidez dans vos débuts (et même ensuite ^^) :
*Tuto Algo->Ti Basic (par Linkakro) : Traduisez vos algo (de type algobox) en prgm pour votre TI!
*Catalogue des emplacements et traductions (anglais/français) des fonctions sur la TI.
*Faites vos propres programmes de maths (par ash)

Et au fait: la politesse n'a jamais tué personne winkle.gif
 Adresse email Haut de page Bas de page 
 
Mingerton



Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
Posté le : Mer 17 Mai 2017, 12:10   Citer 

Je crois que les nombres mis dans la liste finale désignent les places des balles dans le barillet. Avec ton code on aura jamais les nombres au dessus de A si je me trompe pas, donc ca revient à toujours avoir les balles au même endroit.

Je ne sais pas exactement comment le A est exploité, j'ai écrit mon code avec l'indication suivante :

Citer : "Homer_Dalor"
Avec ce que j'ai écris, on se retrouve avec A fois 0 puis 6-A fois des valeurs entre 1 et 6 sans doublons dans L1.



----------------------
Mes articles
Mes programmes en ligne (je termine peu de projets)

Guide traduction Algo-Basic, par Linkakro
Catalogue des fonctions 82/83/84 FR/EN
 Adresse email Haut de page Bas de page 
 
m@thieu41



Autorisation : Membre
Nb de messages : 856
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Jeu 18 Mai 2017, 12:22   Citer 

En fait je m'étais trompé, la sous-chaine doit être "0*" et non "*0" avec mon code (corrigé, cette fois c'est la bonne :p):


Code
NbrAléat(6->L2
suite(X<=A,X,1,6->L1
TriCroi(L2,L1
"
For(F,1,6
Rép+sous-Chaîne("0*",1+L1(F),1
End



À la fin des 3 premières lignes, on a une liste L1 avec A fois 1 dedans, et 6-A fois 0, dans un ordre aléatoire.

Ensuite, avec ma façon d'afficher (1+L1(F)), on affiche bien des "*" lorsque L1 vaut 1 (à A endroits) et des "0" ailleurs.

*************************


Code
:suite(X,X,1,6->L1
:NbrAléat(6->L2
:TriCroi(L2,L1
:L1suite(X>A,X,1,6->L1
:"
:For(F,1,6
:Rép+sous-Chaîne("*0",somme(L1=F)+1,1
:End



Cette méthode marche aussi, mais est moins optimisée

----------------------
Pour vous aidez dans vos débuts (et même ensuite ^^) :
*Tuto Algo->Ti Basic (par Linkakro) : Traduisez vos algo (de type algobox) en prgm pour votre TI!
*Catalogue des emplacements et traductions (anglais/français) des fonctions sur la TI.
*Faites vos propres programmes de maths (par ash)

Et au fait: la politesse n'a jamais tué personne winkle.gif
 Adresse email Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
Mingerton



Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
Posté le : Jeu 18 Mai 2017, 22:45   Citer 

Je crois que j'ai capté où on ne s'était pas compris : je n'avais pas vu que tu avais changé la ligne qui est dans le For(), c'est pour ca que je ne comprenais pas ton code.

Donc oui, cette méthode est mieux optimisée winkle.gif

----------------------
Mes articles
Mes programmes en ligne (je termine peu de projets)

Guide traduction Algo-Basic, par Linkakro
Catalogue des fonctions 82/83/84 FR/EN
 Adresse email Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse





  Powered by Fire-Soft-Board v1.0.10 © 2004 - 2024 Groupe FSB
Page générée en 9 requêtes
BlackOne par Grimmlink