SA-MP Forums Archive
[Off] Desafio: strfind rбpido - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+---- Thread: [Off] Desafio: strfind rбpido (/showthread.php?tid=468502)



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.