Forum

Catégorie : Programmes
Forum : Les programmes des internautes
Vues : 1547
Réponses : 21
Type : discussion
Etat : réponses autorisées

Simulateur de lancé de dé a 6 face - Page 1 / 2

leo_85 le 12/04/2015 à 22:25
un programme a la con tout est dans le titre se serait juste pas mal de l'optimiser vue qu'au delà de 50 lancé ça rame:
Code
EffEcr
0->A
0->B
0->C
0->D
0->E
0->F
0->G
0->H
Disp "Combiens de","lancé?
Input B
EffEcr
Lbl 1
If B>0
entAléat(1,6->A
B-1->B
If A=1
Then
C+1->C
End
If A=2
Then
D+1->D
End
If A=3
Then
E+1->E
End
If A=4
Then
F+1->F
End
If A=5
Then
G+1->G
End
If A=6
Then
H+1->H
End
If B>0
Goto 1
Disp "1","2","3","4","5","6
Output(1,4,C
Output(2,4,D
Output(3,4,E
Output(4,4,F
Output(5,4,G
Output(6,4,H
snap le 12/04/2015 à 22:39
Toujours jouer avec des listes, c'est beaucoup mieux <3

Code
EffEcr
effList L1
Disp "Combiens de","lancé?
Input B
EffEcr
for(A,1,B
entaleat(1,6->C
1+L1(C->L1(C
end
Disp "1","2","3","4","5","6
for(A,1,6
Output(A,4,L1(A
end
m@thieu41 le 12/04/2015 à 22:43
Salut !
entAleat(1,6,x permet de renvoyer une liste de x lances, quelques opérations sur les listes et c'est joue winkle.gif
snap le 12/04/2015 à 22:46
Malheureusement,je ne me souviens plus de ce que les listes ont a offrir comme fonctions cry.gif Faudrait que je m'y remette !
Dans tous les cas, je pense que pour ce résultat même avec les fonctions sur les listes, ça prendrait autant de place^^
leo_85 le 12/04/2015 à 22:57
a
Code
1+L1(C->(C
j'ai une erreur sur le symbole sto
snap le 12/04/2015 à 23:05
Tu n'as pas écris le deuxième L1 dans la ligne, faute de frappe? Si oui, alors essaie de fermer les parenthese happy.gif
m@thieu41 le 12/04/2015 à 23:12
En version courte :p
Code
Input "NB LANCES:",X
entAleat(1,6,X->L1
EffEcr
Disp 1,2,3,4,5,6
For(A,1,6
Output(A,4,somme(L1=A
End
snap le 12/04/2015 à 23:17
Ah gg ! Je sais pas si ça marche mais je pense que tu l'as testé ^^
Je savais pas que ça donnerais ce résultat somme (L1=A) c'est quand même bizarre faut l'avouer ! ^^ je pense pas pouvoir faire mieux la xD
snap le 12/04/2015 à 23:20
Ah bah je viens de penser à quelque chose !
Test ça stp <3

Code

Input "NB LANCES:",X
EffEcr
entAleat(1,6,X
For(A,1,6
Disp A
Output(A,4,somme(rep=A
End


Si ça marche on gagne 4 octets !! oO
m@thieu41 le 12/04/2015 à 23:24
Je n'ai pas pu le tester mais pour explication :
L1=A renvoie une liste de booleens de la meme taille que L1 avec chaque terme qui vaut 1 si celui de L1 valait A et 0 sinon.
En prenant la somme on a donc le nombre de termes égaux a A happy.gif
Ex :
{1,3,2,1}=1 renvoie {1,0,0,1}
Et somme({1,0,0,1} renvoie 2 ce qui est bien le résultat voulu winkle.gif

Edit: Oui effectivement il restait des optimisations a faire bien vu winkle.gif
leo_85 le 13/04/2015 à 10:57
le prog de M@thieu41 marche a la perfection et rame beaucoup moin que le miens glasses.gif 200 lancé en 20sec godgrace.gif celui de snap aussi je viens de le tester

je pensais pas être aussi mauvais quand je vois la page que j'ai écris... moodforlove.gif
leo_85 le 14/04/2015 à 11:34
problème que je ne constate que maintenant : impossible de dépasser la barre des 950 lancé : erreur mémoire contrairement a ma version pas du tout opti
m@thieu41 le 14/04/2015 à 13:51
Oui la taille des listes est limitée a 999... Mais on peut se débrouiller quand même je poste ça ce soir j'ai pas le temps la ^^
leo_85 le 14/04/2015 à 15:30
ok alors j’attends happy.gif
snap le 14/04/2015 à 20:07
Comme ça je dirais que ça devrais marcher, mais je suis pas très sur xD
Faudrait tester <3

Code
Input "NB LANCES:",X
EffEcr
effList L1
for(I,1,X/900+1
entAleat(1,6,900-(-X+900(I+1))(I=partEnt(X/900+1
For(A,1,6
L1(A)+somme(rep=A->L1(A
end
end
for(A,1,6
Disp A
Output(A,4,L1(A
End
leo_85 le 15/04/2015 à 11:26
erreur de domaine a la 5ème ligne de ton code
Code
entAleat(1,6,900-(-X+900(I+1))(I=partEnt(X/900+1

happy.gif
snap le 15/04/2015 à 15:39
Ah oui, je pense avoir trouvé le problème ! Essaie ça :

Code
entAleat (1,6,900-(900I-X)(I=partEnt (X/900+1
leo_85 le 16/04/2015 à 11:15
du coup maintenant l'erreur est a
Code
Output(A,4,L1(A
je sais pas si c'est du au fait que j'ai essayé qu'avec 10 lancés extraterre.gif
snap le 16/04/2015 à 14:20
C'est peut-être dû au EffList L1, je sais plus si ça supprime la liste ou si ça met tout à 0, essaie, à la place de ce EffList L1 de mettre :

Code
{0,0,0,0,0,0->L1


Et normalement ça devrais marcher avec n'importe quel nombre de lancé winkle.gif
Mingerton le 16/04/2015 à 18:40
EffList supprime la liste en effet. Pour la ramener à 0, tu peux aussi utiliser ceci qui est plus léger :
Code
Fill(0,L1

Si c'est juste ponctuel et que tu penses réutiliser L1 telle qu'elle était avant d'être effacée, tu peux aussi écrire 0L1 quand tu en as besoin.