RANGER DES MOTS PAR ORDRE ALPHABÉTIQUE

Kerrigan Messages postés 708 Date d'inscription lundi 15 juillet 2002 Statut Membre Dernière intervention 17 mars 2005 - 26 févr. 2004 à 15:42
hisoka2501 Messages postés 264 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 7 juillet 2009 - 5 sept. 2005 à 23:38
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/20770-ranger-des-mots-par-ordre-alphabetique

hisoka2501 Messages postés 264 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 7 juillet 2009
5 sept. 2005 à 23:38
a la place de goto fin
et de :fin

"break"

( je fais la chasse aux goto)

break stope la boucle en court et poursuit le script en cour :)


a part ca exelent alias, bravo ;)
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
20 avril 2004 à 14:36
je fais une seule comparaison a chaque appel de /compare au lieu d'en faire plein de successives ... a ma connaissance c un des trucs qui prend du temps enfin bon ... et après avoir réfléchi je sais pas si c pas un coup de bol que ca prenne moins de temps ... dépend de la liste :/ moi chu sur d'la chimie orga et un peu de dynamique haut les coeurs courage a++
Kerrigan Messages postés 708 Date d'inscription lundi 15 juillet 2002 Statut Membre Dernière intervention 17 mars 2005
19 avril 2004 à 23:02
bon je vais voir comment tu vas traiter ça parce que j'ai pas bien capté le code ... faut dire que je dois réviser la thermo de sup ce soir... je crois que tu sais ce que c'est :(
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
19 avril 2004 à 15:41
pas exactement pardon au détail des majuscules près ... enfin bon toi qui est en train de lire un de mes moments de solitudes ca te fait au moins 4 ou 5 facon de trier ... Maniaque ! bon allé j'lache mon pc pardon pour le pourrissage d'écran
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
19 avril 2004 à 15:38
un autre truc me vient a l'esprit

1) passe ptet le $m du while en variable au début ... sur un tri de 40 mots (mot1 ... mot40) j'passe de 1432 a 1292 ms ... ok c pas fameux

2) sinon plutot que faire des tonnes de comparaisons , et la j'parle surtout pour les mots longs pourkoi ne pas aligner les codes ascii successifs et faire la comparaison seulement a la fin ? avec par exemple une astuce genre $right( $calc(1000 + $asc(gnagna)) ,3)pour avoir des codes de 3 lettres avec certitude ... et ce jusqu'a ce qu'un mot soit trop court genre ceci :

(ca fait pas le mm tri tout a fait pour les chiffres :
toi > mot10 mot1 mot11
moi > mot10 11 1 avec l'alias tel quel , 1 10 11 avec les deux lignes inhibeés en dessous ...)

alias -l compare {
var %i 1 , %len $iif($len($1) <= $len($2) , $len($1) , $len($2)) , %mot1 , %mot2
while (%i <= %len) {
%mot1 = %mot1 $+ $right($calc(1000 + $asc($mid($1,%i,1))),3)
%mot2 = %mot2 $+ $right($calc(1000 + $asc($mid($2,%i,1))),3)
inc %i
}
if (%mot1 <= %mot2) { return $1 } | else { return $2 }
;ou sinan :
;if (%mot1 == %mot2) return $iif($len($1) <= $len($2) , $1 , $2 )
;if (%mot1 < %mot2) { return $1 } | else { return $2 }
}

la je tourne a 820 ms pour 40 mots on y gagne un peu
la dernière solution (celle inhibée) est pas forcément super utile parce qu'elle réalise exactement le tri mirc en tout cas pour les mots commencant par une LETTRE :
alias -l compare { return $iif($1 <= $2 , $1 , $2) }
la 171 ms pour 40 mots lol
ensuite faut savoir ce qu'on veut faire des chiffres ...
bon allé vé bosser ++
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
19 avril 2004 à 15:00
pardon j'avais pas lu la remarque de darkyojimbo2 ... ton code fait du tri lexicographique sur des mots alphanumériques alors qu'avec mon pauvre <= je trie les mots alphanumériques par ordre croissant ... donc c vraiment pas la même chose je retire ... beau travail sinon ...
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
19 avril 2004 à 14:57
heu ... je sais pas si c'est fait exprès j'vais poster un tri de liste bientot mais j'ai vu un alias compare ... et tu peux ptet te simplifier la vie sans ca non ?
//Echo > $iif(mot1 <= mot2,1,0)
:o) il me semble que les opérateurs mirc exécutent déja un tri alphanumérique , ca t'évitera de t'embêter a regarder chaque première lettre puis chaque seconde etc ... enfin j'dis ptet une bêtise mais le tri sans tenir compte des majuscules est une idée aussi ... le tien tient compte des majs je sais pas si vaut mieux mettre tous les mots commencant par une maj avant ceux commencant par une minuscule ... faut voir ce qu'on en fait quoi ...
ChAnG-Fu Messages postés 165 Date d'inscription dimanche 2 novembre 2003 Statut Membre Dernière intervention 1 juillet 2006
26 févr. 2004 à 20:56
je prefere la hash table c'est clair qu'elle peut rebuter maisje la trouve plus stylée ... moins classique aussi
cs_SornDrixer Messages postés 2084 Date d'inscription jeudi 12 décembre 2002 Statut Membre Dernière intervention 30 janvier 2011 8
26 févr. 2004 à 19:22
Je trouve personnellement que la version en variable est plus compréhensible que la version en hashtable.

Beau boulot en tout cas :)
10/10
Kerrigan Messages postés 708 Date d'inscription lundi 15 juillet 2002 Statut Membre Dernière intervention 17 mars 2005
26 févr. 2004 à 16:50
avec un truc de ce style

alias chrono {
var %ticks = $ticks
$1-
echo -s éffectué en $calc($ticks - %ticks) millisecondes
}

et tu fais /chrono commade
je crois que c'est ça
Sinon je met directement la premiere ligne et le la derniere dans mon code.
darkyojimbo2 Messages postés 244 Date d'inscription mercredi 11 juin 2003 Statut Membre Dernière intervention 25 juin 2005
26 févr. 2004 à 16:44
Pour les chiffre les problemes c'est :

//echo -a $trier(4,333,222) qui retourne 222 333 4.
mais bon c'est normal ça. Vu que pour mirc le 2 est avant le 4.
C'est pour ce que les machines remplaceront jamais les hommes :p !

Je trouve que c'est original, ca m'a fait un bon exercice de lecture pour progresser dans les hash tables, j'ai mis un moment avant de comprendre le code.
J'ai eu plus de facilité à comprendre le code en hash tables qu'en variables classiques. Bizzare ?

J'ai une question :
Comment vous faites pour calculer le temps d'exectution ?
hier j'ai essaye en métant un grand nombre dans mon alias et apres j'ai chronometrer avec une montre :p. je pense pas que c'est la bonne solution. lol

pas tres utile mais mIRC ne sert pas qu'a chatter ! donc quand meme 10/10
Kerrigan Messages postés 708 Date d'inscription lundi 15 juillet 2002 Statut Membre Dernière intervention 17 mars 2005
26 févr. 2004 à 15:42
avec la version hastable il n'y a pas de problème de set line too long et la rapidité reste pour des longues chaînes de caractère

par contre elle est plus lente de 4 milisecondes par rapport a la version en variable locale pour les chaînes de caractères de taille intermédiaire
Rejoignez-nous