Résultats du défi du 01/08/03: Calculateur Algébrique
Tout d'abord j'aimerais préciser une petite erreur dans le défi précédent : Toutes les mesures de temps étaient erronées car j'ai bêtement utilisé $ctime au lieu de $ticks. Je m'en excuse.
Ce mois-ci, j'ai l'intension de tester un nouveau type de défi, vous devrez en effet corriger un code et l'optimiser.
Le code en question est un code permettant d'effectuer des calculs algébriques. Syntaxe : $algebre( calcul , valeurs ) Exemple : $algebre(2a*b/c=r,a=5;b=3;c=2) Retourne : Valeur de r : 15
alias algebre { ;Nom : $algebre ;Syntaxe : $algebre(calcul,valeurs) ;Exemple : $algebre(a+b=c,a=2;b=6) ;Retourne : Valeur de c : 8
var %partiecalculun $gettok($$1,1,61) var %partiecalculdeux $gettok($$1,2,61) var %maximum $len(%partiecalculun) var %index 1 while (%index <= %maximum) { var %lettreactive $mid(%partiecalculun,%index,1) var %lettresuivante $mid(%partiecalculun,$calc(%index + 1),1) var %ascactive $asc(%lettreactive) var %ascsuivante $asc(%lettresuivante) var %activelettre $false var %suivantelettre $false if (%ascactive >= 65) && (%ascactive <= 90) var %activelettre $true if (%ascactive >= 97) && (%ascactive <= 122) var %activelettre $true if (%ascactive >= 48) && (%ascactive <= 57) var %activelettre $true if (%ascsuivante >= 65) && (%ascsuivante <= 90) var %suivantelettre $true if (%ascsuivante >= 97) && (%ascsuivante <= 122) var %suivantelettre $true if (%ascsuivante >= 48) && (%ascasuivante <= 57) var %suivantelettre $true if (%suivantelettre == $true) && (%activelettre == $true) { var %partiecalculun $mid(%partiecalculun,1,%index) var %partiedeux $mid(%partiecalculun,$calc(%index + 1),$len(%partiecalculun)) var %partiecalculun %partiune $+ * $+ %partiedeux } inc %index 1 }
var %index 1 while (%index <= $gettok($$2,0,59)) { var %egalite $gettok($$2,%index,59) var %lettre = $gettok(%egalite,1,61) var %chiffre = $gettok(%egalite,2,61) var %partiecalculun = $replace(%partiecalculun,%lettre,%chiffre) inc %index 1 } var %reponse $calc(%partiecalculun) return Valeur de %partiecalculdeux : %reponse }
Règlement
Doit fonctionner sous mirc 6.03
Doit être le plus légé possible, tout en restant fonctionnel.
Doit remplir les mêmes fonctions que le code ci-dessus.
Vous pouvez renommer les variables, supprimer/remplacer des lignes de codes inutiles, créer des alias, etc.
Ne marche pas lorsque 2 lettres sont accolées (multiplication)
Conclusion:
Temps $algebre: 0.2 ms Taille du fichier: 131 bytes
Bien que ce code soit le plus légé, je tiens à favoriser les codes ayant les mêmes fonctions que le code de départ, sinon ce code aurait été le gagnant.
Ce code remplit toutes les fonctions du code de base, est légé et assez rapide.
Dommage pour Goulagman que sont code ne prenne pas en charge les lettres accolées (multiplication).