OVH Cloud OVH Cloud

[DIR MX2004] Random particulier

5 réponses
Avatar
Twinky
Hello Bubar ou Ned ;)

Je souhaite avoir un random basé sur 8 lettres
ici "musiques" et lors du mélange, garder "musiques"
dans un ordre différent et en évitant le boublon de lettres
genre "iiieeusq" autre random "eeuqqssm"

cela devrait ressemblait à ça
"muquisse" other random "uumiqses"

-----------------------------------------
ici mon code me donne
"iiieeusq" autre random "eeuqqmsm"
et ce n'est pas l'effet rechercher.

LetterList = ["lettre_m","lettre_u","lettre_q","lettre_s","lettre_e",\
"lettre_i","lettre_u","lettre_s" ] -- m u s i q u e en désordre

repeat with i = 30 to 37
sprite(i).member = LetterList[random(i-29)]
-- put LetterList[i-29]
end repeat
-----------------------------------------

dois-je passer par un list.duplicate() pour garder
le mot "musiques" mais en ordre mélangé ?




j'ai testé aussi ça mais suis pas sûr d'être sur la bonne voie

-----------------------------------------
LetterList = ["lettre_m","lettre_u","lettre_q","lettre_s","lettre_e",\
"lettre_i","lettre_u","lettre_s" ]

RandomLettres = random(LetterList.count)

repeat with r = 1 to LetterList.count
rep = LetterList[random(randomLettres)] -- pas bon car retrouve \
"iiieeusq" autre random "eeuqqssm"

-- rep = LetterList[randomLettres] -- pas bon n'affiche 1 lettre 8 fois
-- rep = LetterList[r] -- erreur see msg dy infinity nb_iteral
put rep
end repeat
-- ici je ne vois pas comment récupérer le random "RandomLettres "
repeat with i = 30 to 37
sprite(i).member = rep -- pas bon
-- ou encore
-- sprite(i).member = RandomLettres -- pas bon non plus
end repeat
-----------------------------------------

Merci pour l'aide apportée
Bon week end ;)
----------
Twinky

5 réponses

Avatar
Bubar
Déjà j'ai pas tout compris


dans un ordre différent et en évitant le boublon de lettres
genre "iiieeusq" autre random "eeuqqssm"

cela devrait ressemblait à ça
"muquisse" other random "uumiqses"


Là aussi tu as des doublons. Tu ne veux pas plutôt dire, avec une fois et
une seule chaque lettre du mot (donc 2 u c'est normal, mais pas 2 i) ?

De tête, à une heure tardive, un samedi soir (=si ça marche du premier coup
c'est du bol)
l=["m","u","s","i","q","u","e"]
t=""
repeat while TRUE
nb=random(l.count) --une lettre au hasard
if nb=0 then exit repeat --plus sur du tout si random(0) donne bien 0.
En gros si l est vide on sort
t=t&l[nb] --on rajoute la lettre
l.deleteat(nb) --on vire la lettre du mot
end repeat

Là tu as (normalement) le mot dans n'importe quel ordre.

--
Bubar
Freelance Multimédia - internet
Création de logiciels multimédia et sites web
http://www.wapitistudio.com
Avatar
Twinky
Hello

en effet j'ai mal formulé mon post...

en gros tu as une liste dans laquelle il ya
le mot "musiques"

le random sert à mélanger le mot "musiques"
comme si il était dans un checker que tu secoues
Ensuite tu en sors une lettre qui ne commence
jamais par la meme.

--------
soit :

1er mélange :
1ere lettre tirée au sort est le U, and so on qui composera le mot musiques

2eme mélange :
1 ere lettre cette fois est le S etc...
-------
au final tu as le mot "musiques" composé de 8 lettres
et quelque soit le random effectué, les lettres
affichées à l'écran doivent tjs composer le mot "musiques"
mais ne jamais commencer par la mettre lettre

nb Mélanges:
1) m i s u q e s u
2) u q s m u i s e
etc...

mais je ne dois jamais avoir
1) m m m u u s s e
2) s s e e i i i m

Thx ;)

------------------------------------------
Bubar wrote :
------------
De tête, à une heure tardive, un samedi soir (=si ça marche du premier coup
c'est du bol)
l=["m","u","s","i","q","u","e"]
t=""
repeat while TRUE
nb=random(l.count) --une lettre au hasard
if nb=0 then exit repeat --plus sur du tout si random(0) donne bien 0.
En gros si l est vide on sort
t=t&l[nb] --on rajoute la lettre
l.deleteat(nb) --on vire la lettre du mot
end repeat

Là tu as (normalement) le mot dans n'importe quel ordre.
-----------------------------------------
!!! Il en résulte une boucle sans fin et crash de director !!! :(
Avatar
Bubar
Twinky wrote:
Hello

en effet j'ai mal formulé mon post...

en gros tu as une liste dans laquelle il ya
le mot "musiques"

le random sert à mélanger le mot "musiques"
comme si il était dans un checker que tu secoues
Ensuite tu en sors une lettre qui ne commence
jamais par la meme.

--------
soit :

1er mélange :
1ere lettre tirée au sort est le U, and so on qui composera le mot
musiques
2eme mélange :
1 ere lettre cette fois est le S etc...
-------
au final tu as le mot "musiques" composé de 8 lettres
et quelque soit le random effectué, les lettres
affichées à l'écran doivent tjs composer le mot "musiques"
mais ne jamais commencer par la mettre lettre

nb Mélanges:
1) m i s u q e s u
2) u q s m u i s e
etc...

mais je ne dois jamais avoir
1) m m m u u s s e
2) s s e e i i i m

Thx ;)


Heu je ne suis toujours pas sur de saisir. Tu parles de mot qui ne
commencent pas par la même lettre. Ce que je comprends : faire x tirages,
tous différents, et donc aucun ne commence par la même lettre
Ex :
seuqidum
esuqidum
iquesmud
c'est ok

seuqidum
siduudqm
pas bon car 2 fois le s en 1er

Mais pour ton exemple "mauvais", je comprends : une seule fois chaque lettre
du mot initial.

Si c'est le cas 1, alors mon algo ne fait pas ça. Je ne fais qu'un tirage.
Si c'est le cas 2, alors il est bon (hors problème de plantage de la version
précédente).

!!! Il en résulte une boucle sans fin et crash de director !!! :(


Ca doit venir de mon test nb=0
A la place, teste ça :
l=["m","u","s","i","q","u","e"]
t=""
repeat while TRUE



if l.count=0 then exit repeat

nb=random(l.count) --une lettre au hasard
t=t&l[nb] --on rajoute la lettre
l.deleteat(nb) --on vire la lettre du mot
end repeat


t contient le mot mélangé. Attention, je ne fais pas le test de savoir si le
random me sort le mot dans le même ordre (c'est rare mais pas impossible)
Si tu veux absolument avoir le mot mélangé sans risque d'avoir l'original :

mot="musique"
l=[]
repeat with i=1 to mot.length
l.add(mot.char[i])
end repeat
repeat while TRUE
t=""
repeat while TRUE



if l.count=0 then exit repeat

nb=random(l.count) --une lettre au hasard
t=t&l[nb] --on rajoute la lettre
l.deleteat(nb) --on vire la lettre du mot
end repeat


if t<>mot then exit repeat
end repeat

--
Bubar
Freelance Multimédia - internet
Création de logiciels multimédia et sites web
http://www.wapitistudio.com
Avatar
Twinky
J'ai trouvé la soluce avec une liste
Merci du coup de pouce ;)
tu m'as bien mis sur la voie

LetterList = ["lettre_m","lettre_u","lettre_s","lettre_i",
"lettre_q","lettre_u","lettre_e","lettre_s"]
repeat with i = 30 to 37
if LetterList.count=0 then exit repeat
nb=random(LetterList.count)
a = LetterList[nb]
LetterList.deleteat(nb)
sprite(i).member = a
-- put LetterList[i-29]
put a
end repeat

----------
Twinky
Avatar
Twinky
j'ai répondu tardivement vu au probleme du serveur
toute à l'heure
" Error 400 server NEWS (NNTP)More Files writing..."