Desafio: strfind rбpido -
ipsBruno - 08.10.2013
Mais uma vez, dessa vez o desafio й fazer um strfind mais rбpido que o strfind da SAMP
Alguйm aн, tenta?
Sugestгo de algorнtimos:
http://www-igm.univ-mlv.fr/~lecroq/string/
Re: Desafio: strfind rбpido -
ipsBruno - 08.10.2013
Jб que ninguйm quis, aqui minha funзгo.
й duas vezes mais rбpido no
ignorecase:
fstrfind
pawn Код:
new
i_loop@find,
j_loop@find,
p_loop@find;
fstrfind( text[] , pattern[] , {bool,_}: ignorecase = false, pos = -1)
{
if(!ignorecase)
return strfind( text , pattern, ignorecase, pos);
j_loop@find = strlen(pattern)-1;
for(i_loop@find = strlen(text)-1 ; i_loop@find > pos ; --i_loop@find) {
calcular:
p_loop@find = (text[i_loop@find] ^ pattern[j_loop@find]);
if(!((32 ^ p_loop@find) & p_loop@find)) {
if(!j_loop@find) return i_loop@find;
i_loop@find--;
j_loop@find--;
if( ( ( ~i_loop@find ) ) ) {
goto calcular;
}
}
else {
j_loop@find = strlen(pattern) - 1 ;
}
}
return -1;
}
Depende do modo de uso:
pawn Код:
#define CONT GetTickCount()
new C = CONT;
for(new i; i != 10000; i++) {
fstrfind("testa teste testu testi testo", "testu", true);
fstrfind("testa teste testu testi strFind", "strFind", true);
fstrfind("testa teste testu testi strFind", "testa", true);
fstrfind("testa teste testu testi testo", "testu", false);
fstrfind("testa teste testu testi strFind", "strFind", false);
fstrfind("testa teste testu testi strFind", "testa", false);
}
C = CONT - C;
new T = CONT;
for(new i; i != 10000; i++) {
strfind("testa teste testu testi testo", "testu", true);
strfind("testa teste testu testi strFind", "strFind", true);
strfind("testa teste testu testi strFind", "testa", true);
strfind("testa teste testu testi testo", "testu", false);
strfind("testa teste testu testi strFind", "strFind", false);
strfind("testa teste testu testi strFind", "testa", false);
}
T = CONT - T;
printf("%d x %d", C , T );
Re: Desafio: strfind rбpido -
PT - 08.10.2013
cara vc ja viu que tem a capacidade de melhorar e muito as funcoes nativas da sa-mp?
poste estas coisas na board inglesa quem sabe vc vira beta tester ( nunca se sabe :O )
Re: Desafio: strfind rбpido -
SkullFire - 08.10.2013
Quote:
Originally Posted by PT
cara vc ja viu que tem a capacidade de melhorar e muito as funcoes nativas da sa-mp?
poste estas coisas na board inglesa quem sabe vc vira beta tester ( nunca se sabe :O )
|
Concordo, acho que o bruno deveria postar algumas coisas na english board . Quem sabe ele nгo vira um beta tester
Re: Desafio: strfind rбpido -
Juniiro3 - 08.10.2013
Quote:
Originally Posted by PT
cara vc ja viu que tem a capacidade de melhorar e muito as funcoes nativas da sa-mp?
poste estas coisas na board inglesa quem sabe vc vira beta tester ( nunca se sabe :O )
|
Que louco, um Beta Tester da board Portuguesa haha
Re: Desafio: strfind rбpido -
RuanRider - 08.10.2013
o ipsBruno vai vira beta tester?? oi tudo bem, eu sou o meunick e quero ser seu amigo '0'
zoaq
Re: Desafio: strfind rбpido -
PT - 08.10.2013
Quote:
Originally Posted by RuanRider
o ipsBruno vai vira beta tester?? oi tudo bem, eu sou o meunick e quero ser seu amigo '0'
zoaq
|
eu cara fala em um hipуtese, outros ja falam que vai ser...
assim se geram confusoes, + atencao no que le e principalmente ao que fala
Re: Desafio: strfind rбpido -
RuanRider - 08.10.2013
Quote:
Originally Posted by PT
eu cara fala em um hipуtese, outros ja falam que vai ser...
assim se geram confusoes, + atencao no que le e principalmente ao que fala
|
sim, acontece isso, eu simulei em uma brincadeira xD
Re: Desafio: strfind rбpido -
ipsBruno - 08.10.2013
Dificilmente. O mбximo que consegui foi ser moderador dessa бrea
Re: Desafio: strfind rбpido -
WLSF - 09.10.2013
Quote:
Originally Posted by ipsBruno
Jб que ninguйm quis, aqui minha funзгo.
й duas vezes mais rбpido no ignorecase:
fstrfind
pawn Код:
new i_loop@find, j_loop@find, p_loop@find;
fstrfind( text[] , pattern[] , {bool,_}: ignorecase = false, pos = -1) { if(!ignorecase) return strfind( text , pattern, ignorecase, pos);
j_loop@find = strlen(pattern)-1;
for(i_loop@find = strlen(text)-1 ; i_loop@find > pos ; --i_loop@find) {
calcular:
p_loop@find = (text[i_loop@find] ^ pattern[j_loop@find]);
if(!((32 ^ p_loop@find) & p_loop@find)) {
if(!j_loop@find) return i_loop@find;
i_loop@find--; j_loop@find--;
if( ( ( ~i_loop@find ) ) ) { goto calcular; }
} else { j_loop@find = strlen(pattern) - 1 ; } } return -1; }
Depende do modo de uso:
pawn Код:
#define CONT GetTickCount()
new C = CONT; for(new i; i != 10000; i++) { fstrfind("testa teste testu testi testo", "testu", true); fstrfind("testa teste testu testi strFind", "strFind", true); fstrfind("testa teste testu testi strFind", "testa", true);
fstrfind("testa teste testu testi testo", "testu", false); fstrfind("testa teste testu testi strFind", "strFind", false); fstrfind("testa teste testu testi strFind", "testa", false); } C = CONT - C;
new T = CONT; for(new i; i != 10000; i++) {
strfind("testa teste testu testi testo", "testu", true); strfind("testa teste testu testi strFind", "strFind", true); strfind("testa teste testu testi strFind", "testa", true);
strfind("testa teste testu testi testo", "testu", false); strfind("testa teste testu testi strFind", "strFind", false); strfind("testa teste testu testi strFind", "testa", false);
} T = CONT - T;
printf("%d x %d", C , T );
|
Vou tentar aqui tambйm.
Quero ver se chego ao menos perto de melhoras.