Mélanger des mots

cs_SornDrixer Messages postés 2084 Date d'inscription jeudi 12 décembre 2002 Statut Membre Dernière intervention 30 janvier 2011 - 6 févr. 2004 à 07:21
cs_SornDrixer Messages postés 2084 Date d'inscription jeudi 12 décembre 2002 Statut Membre Dernière intervention 30 janvier 2011 - 6 févr. 2004 à 21:55
Voici un petit alias que je suis entrain de coder, pour passer le temps, qui a pour but, de mélanger les mots dans une phrase :

alias melange { if $1- { var %mel.tmp 0, %mel.nb $gettok($1-,0,32) }
while %mel.nb > %mel.tmp {
:re
var %mel.tmp2 = $rand(1,%mel.nb)
if %mel.tmp2 !isin %mel.tmp3 { var %mel.res = %mel.res $+ $chr(32) $+ $gettok($1-,%mel.tmp2,32) }
else goto re
inc %mel.tmp
var %mel.tmp3 = %mel.tmp3 $+ $chr(124) $+ %mel.tmp2 $+ $chr(124)
}
return %mel.res
}

Utilisation : //echo -a $melange(la phrase)

Si la phrase est trop grande, genre plus de 7 ou 8 caractères, mIRC se gèle. (à cause de $rand qui tombe plusieurs fois sur les même nombre)
Donc si vous avez une solution d'optimisation, ou une autre façon de procéder pour arriver à se que je vais faire, je vous écoute :)
-<gras>[ Sorn_Drixer ]-</gras>
-
Un problème ? une question ? N'hésitez pas, le forum est là pour ça.

6 réponses

cs_Kolibot Messages postés 817 Date d'inscription mercredi 25 juin 2003 Statut Membre Dernière intervention 19 avril 2004
6 févr. 2004 à 07:45
Petite Astuce : $gettok($1-,0,32) <=> $0

By Koli :approve)

Rejoignez le channel du Réseau Codes Sources :
=>> [irc://irc.heliosnet.org/programmation #Programmation]
0
cs_SornDrixer Messages postés 2084 Date d'inscription jeudi 12 décembre 2002 Statut Membre Dernière intervention 30 janvier 2011 8
6 févr. 2004 à 16:04
Kolibot : je connais, remplace voir $gettok($1-,0,32) par $0 dans mon alias, tu verras que dans ce cas cela ne marche pas, et je ne sais pas pourquoi.

Heu sinon, cela répond pas à mon problème :P
-<gras>[ Sorn_Drixer ]-</gras>
-
Un problème ? une question ? N'hésitez pas, le forum est là pour ça.
0
cs_ReMi34 Messages postés 1025 Date d'inscription vendredi 29 août 2003 Statut Membre Dernière intervention 28 mars 2005 2
6 févr. 2004 à 18:09
Tiens, regarde ce que j'ai trouvé :

$scramble(?,texte) par ifx

; Jeux du scramble (mélange l'ordre des lettres ou/et des mots)
; Le texte dois être séparé uniquement par des espaces.
; ie: NON! "la.phrase:à:mélanger"
; OUI! "la phrase à mélanger"
;
; Syntaxe..
; $scramble(1,texte) <- Mélange juste les lettres
; $scramble(2,texte) <- Mélange les mots et les lettres
; $scramble(3,texte) <- Mélange juste les mots
;
; Si l'option [1, 2 ou 3] n'est pas spécifié, l'alias indiquera donc
; qu'il y a un erreur. [* $scramble: invalid parameters]
;
; Le code...

alias scramble {
if ($2) {
unset %m %s %c %y %e %v %l %t %r %f %g %o %h
if ($1 = 3) {
set %h 1 | set %g 0 | set %f $numtok($2-,32)
while (%h <= %f) {
:p | set %r $r(1,%f)
if ($istok(%g,%r,1,32)) { goto p }
set %g %g %r | set %o %o $gettok($2-,%r,32) | inc %h
}
return %o | halt
}
set %s 0 | set %v 1
while ($gettok($2-,%v,32)) {
set %t $gettok($2-,%v,32) | set %l $len(%t)
unset %m %s | set %e 1
while %e <= %l {
:l | set %r $r(1,%l)
if ($istok(%s,%r,32)) { goto l }
set %s %s %r | set %m %m $+ $mid(%t,%r,1) | inc %e
}
set %y %y %m | inc %v
}
if ($1 = 1) { return %y }
if ($1 = 2) {
set %h 1 | set %f $numtok(%y,32) | set %g 0
while %h <= %f {
:p | set %r $r(1,%f)
if ($istok(%g,%r,1,32)) { goto p }
set %g %g %r | set %o %o $gettok(%y,%r,32) | inc %h
}
return %o
}
}
else { return * $chr(36) $+ scramble: invalid parameters }
}


:)

> Re[M]i_34 :-p
0
cs_SornDrixer Messages postés 2084 Date d'inscription jeudi 12 décembre 2002 Statut Membre Dernière intervention 30 janvier 2011 8
6 févr. 2004 à 20:53
Merci ReMi34, mais j'aurais souhaité pouvoir optimiser mon code, et non utiliser celui de quelqu'un d'autre ^^

C'est vrai que je pourrais m'en inspirer, mais c'est quand même la merde pour s'y retrouver, mais dans se que j'ai compris, le principe est le même que celui que j'ai utilisé, sauf mon code est pas optimisé :(

Je vais voir comment je peux faire ;)
Merci
-<gras>[ Sorn_Drixer ]-</gras>
-
Un problème ? une question ? N'hésitez pas, le forum est là pour ça.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ReMi34 Messages postés 1025 Date d'inscription vendredi 29 août 2003 Statut Membre Dernière intervention 28 mars 2005 2
6 févr. 2004 à 21:13
Lol, je ne voulais pas te déstabiliser, je voulais juste te montrer que quelqu'un l'avait fait :)

> Re[M]i_34 :-p
0
cs_SornDrixer Messages postés 2084 Date d'inscription jeudi 12 décembre 2002 Statut Membre Dernière intervention 30 janvier 2011 8
6 févr. 2004 à 21:55
J'ai adapté mon alias selon le modèle du code que tu m'as fournis ReMi34, mais j'aimerai bien comprendre pourquoi mon code de base fait geler mIRC, je vois pas en quoi il est plus lent que l'autre.

Voici le nouveau alias pour ceux que cela intérèsse :
alias melange {  if $1- { var %mel.tmp 0, %mel.nb $numtok($1-,32), %mel.use = 0 } | else halt  while %mel.nb > %mel.tmp { :re | var %mel.rand $r(1,%mel.nb) | if ($istok(%mel.use,%mel.rand,1,32)) { goto re } | var %mel.use %mel.use %mel.rand | inc %mel.tmp | var %mel.res = %mel.res $+ $chr(32) $+ $gettok($1-,%mel.rand,32) }
  return %mel.res
}

-<gras>[ Sorn_Drixer ]-</gras>
-
Un problème ? une question ? N'hésitez pas, le forum est là pour ça.
0
Rejoignez-nous