Autor
|
Tema: [RETO] Alternativa a Instr() (Leído 18,743 veces)
|
krabby
Desconectado
Mensajes: 22
|
Bien pues el resultado que me dio: RESULTADOS PRUEBA 1:
============ RETO INSTR 31/12/10 ============ String a buscar: col String donde buscar: Baila baila baila como Juana, baila la cubana, parece refresco de cola, a mi me parece que estás bien buena. Nº de vueltas: 250
3 Offsets: 1 10 20 ============ COMPROBACION ============ Valores de InStr: 67 67 67
============ VELOCIDAD ============ InStr 0.477649485502989 Raul338 10.0386183350126 Miseryk 16.4880727613527 gaston93 2.41434061336485 Mr Frog 5.18079225155567 Tokes 16.6270077772112 79137913 11.2904333267657 Tokes v2 9.7320513982567 Tenient101 10.14500686101 BlackZeroX 3.33684112168503 krabby 4.56310886870851
____________________________________________________________________________________________________________________________________________
RESULTADOS PRUEBA 2: ============ RETO INSTR 31/12/10 ============ String a buscar: la String donde buscar: Baila baila baila como Juana, baila la cubana, parece refresco de cola, a mi me parece que estás bien buena. Nº de vueltas: 250
3 Offsets: 1 10 20 ============ COMPROBACION ============ Valores de InStr: 4 10 34 BlackZeroX no devuelve los mismos valores 4 16 34
============ VELOCIDAD ============ InStr 0.284480818743699 Raul338 1.87330946357435 Miseryk 2.6841720120485 gaston93 3.54192950290311 Mr Frog 3.34420082794071 Tokes 2.48609337482952 79137913 2.04759066734653 Tokes v2 1.64408418552059 Tenient101 1.47925196267583 BlackZeroX 3.07158023007219 krabby 4.22855545029469
___________________________________________________________________________________________________________________________________________
RESULTADOS PRUEBA 3: ============ RETO INSTR 31/12/10 ============ String a buscar: Ñ String donde buscar: Baila baila baila como Juana, baila la cubana, parece refresco de cola, a mi me parece que estás bien buena. Nº de vueltas: 250
3 Offsets: 1 10 20 ============ COMPROBACION ============ Valores de InStr: 0 0 0
============ VELOCIDAD ============ InStr 0.368475259943215 Raul338 13.7436827438161 Miseryk 49.2554028048075 gaston93 1.92160775460367 Mr Frog 0.345727713266124 Tokes 25.6878945605716 79137913 15.5823844398382 Tokes v2 13.4906600323155 Tenient101 16.8831941475112 BlackZeroX 2.26947023763487 krabby 2.08259039262616
en la tercera prueba de la "Ñ" en ambos resultados sale que Mr. Frog le gana al instr,
|
|
« Última modificación: 1 Enero 2011, 20:35 pm por krabby »
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
... Ninguno de ustedes a compilado el proyecto de comprobacion, esos resultados son invalidos ( me acabe de bajar el proyecto y todo esta en el Debug... ¬¬# )... Miren cual es el mas rapido... inclusive le gano a InStr(), por hay un aguafiestas dijo que no podria...Edito No habia visto que eran 3 prubas aqui las dejo... ============ RETO INSTR 01/01/2011 - 02:42:29 p.m. ============ String a buscar: Ñ String donde buscar: Baila baila baila como Juana, baila la cubana, parece refresco de cola, a mi me parece que estás bien buena. Nº de vueltas: 250 3 Offsets: 1 10 20 ============ COMPROBACION ============ Valores de InStr: 0 0 0 ============ VELOCIDAD ============ 0 Mr Frog 0.2237288 1 InStr 0.4316488 2 gaston93 2.2926488 3 krabby 2.5124888 4 BlackZeroX 3.2794088 5 Tokes v2 16.1948888 6 79137913 21.6315688 7 Tenient101 23.6759288 8 Tokes 45.0908488 9 Raul338 49.8016088 10 Miseryk 159.0136088 ============ RETO INSTR 01/01/2011 - 02:43:11 p.m. ============ String a buscar: la String donde buscar: Baila baila baila como Juana, baila la cubana, parece refresco de cola, a mi me parece que estás bien buena. Nº de vueltas: 250 3 Offsets: 1 10 20 ============ COMPROBACION ============ Valores de InStr: 4 10 34 ============ VELOCIDAD ============ 0 InStr 0.470288 1 79137913 2.211208 2 Raul338 3.088048 3 Tokes v2 3.368368 4 BlackZeroX 3.379128 5 Miseryk 4.264168 6 Mr Frog 4.569008 7 Tokes 5.908088 8 Tenient101 6.049528 9 krabby 6.238808 10 gaston93 6.480928 ============ RETO INSTR 01/01/2011 - 02:44:06 p.m. ============ String a buscar: col String donde buscar: Baila baila baila como Juana, baila la cubana, parece refresco de cola, a mi me parece que estás bien buena. Nº de vueltas: 250 3 Offsets: 1 10 20 ============ COMPROBACION ============ Valores de InStr: 67 67 67 ============ VELOCIDAD ============ 0 InStr 1.6597832 1 gaston93 2.4199032 2 BlackZeroX 3.6896232 3 Mr Frog 4.1875432 4 krabby 5.9086232 5 Raul338 13.7212632 6 Tokes v2 11.0735032 7 Tenient101 12.4469832 8 79137913 14.7459032 9 Tokes 26.1060232 10 Miseryk 26.8289832
Descargar Proyecto de PruebasTemibles Lunas!¡.
|
|
« Última modificación: 1 Enero 2011, 22:11 pm por BlackZeroX▓▓▒▒░░ »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
krabby
Desconectado
Mensajes: 22
|
bueno si tienes razon hay veces que el vb da un resultado en debug y otro cuando es compilado, e incluso falla en uno y en el otro no. ehhh pero segun veo el q le gana al instr es Mr Frog.
edito: mmm :C :C quede tercer puesto .
|
|
« Última modificación: 1 Enero 2011, 21:43 pm por krabby »
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
Aqui dejo el proyecto modificado para que solo lo ejecuten y les salte el notepad con la informacion y el RANKING de las 3 pruebas, ya que en el anterior no vi que eran 3 strings a buscar... Update Reto.rar ============ RETO INSTR 01/01/2011 - 03:12:25 p.m. ============ String a buscar: col String donde buscar: Baila baila baila como Juana, baila la cubana, parece refresco de cola, a mi me parece que estás bien buena. Nº de vueltas: 250 3 Offsets: 1 10 20 ============ COMPROBACION ============ Valores de InStr: 67 67 67 ============ VELOCIDAD ============ 0 InStr 0.5725008 1 BlackZeroX 2.1983408 2 Mr Frog 3.7716608 3 gaston93 4.0096208 4 krabby 5.6024608 5 Raul338 15.4459808 6 Miseryk 24.8291408 7 Tokes v2 10.7238208 8 Tenient101 13.9761008 9 79137913 16.4519408 10 Tokes 26.5471408 ============ RETO INSTR 01/01/2011 - 03:12:25 p.m. ============ String a buscar: la String donde buscar: Baila baila baila como Juana, baila la cubana, parece refresco de cola, a mi me parece que estás bien buena. Nº de vueltas: 250 3 Offsets: 1 10 20 ============ COMPROBACION ============ Valores de InStr: 4 10 34 ============ VELOCIDAD ============ 0 InStr 0.477224 1 Raul338 1.764424 2 Tokes v2 1.775824 3 Tenient101 1.779824 4 BlackZeroX 2.195464 5 Miseryk 3.082744 6 79137913 2.465384 7 Tokes 3.249304 8 Mr Frog 3.814264 9 gaston93 4.428424 10 krabby 7.093384 ============ RETO INSTR 01/01/2011 - 03:12:25 p.m. ============ String a buscar: Ñ String donde buscar: Baila baila baila como Juana, baila la cubana, parece refresco de cola, a mi me parece que estás bien buena. Nº de vueltas: 250 3 Offsets: 1 10 20 ============ COMPROBACION ============ Valores de InStr: 0 0 0 ============ VELOCIDAD ============ 0 Mr Frog 0.2846228 1 BlackZeroX 1.7433028 2 gaston93 1.7897028 3 krabby 1.9981428 4 InStr 3.2337828 5 Raul338 16.1140228 6 Tokes v2 16.0697828 7 79137913 20.9785428 8 Tenient101 24.8553428 9 Tokes 38.0149428 10 Miseryk 84.9994228
Mi funcion actualizada Public Function RetInstr(ByVal Start As Long, ByVal String1 As String, ByVal String2 As String, Optional ByVal Compare As VbCompareMethod = VbCompareMethod.vbBinaryCompare) As Long Dim lng_ST1 As Long lng_ST1 = Len(String1) If Not Start > lng_ST1 Then If Start = 1 Then RetInstr = (Start + Len(Split(Right$(String1, lng_ST1 - Start), String2, 2, Compare)(0))) + 1 Else RetInstr = (Start + Len(Split(Right$(String1, lng_ST1 - Start + 1), String2, 2, Compare)(0))) End If If RetInstr > lng_ST1 Then RetInstr = 0 End If End Function
La Funcion de la RANA Explota cuando se busca una String VACIA ============ RETO INSTR 01/01/2011 - 03:17:23 p.m. ============ String a buscar: String donde buscar: Baila baila baila como Juana, baila la cubana, parece refresco de cola, a mi me parece que estás bien buena. Nº de vueltas: 250 3 Offsets: 1 10 20 ============ COMPROBACION ============ Valores de InStr: 1 10 20 Raul338 no devuelve los mismos valores 0 0 0 Miseryk no devuelve los mismos valores 0 0 0 gaston93 no devuelve los mismos valores 0 0 0 Tokes no devuelve los mismos valores 0 0 0 79137913 no devuelve los mismos valores 0 0 0 Tokes(raul338) no devuelve los mismos valores -1 -1 -1 Tenient101 no devuelve los mismos valores -1 -1 -1 BlackZeroX no devuelve los mismos valores 0 0 0 krabby no devuelve los mismos valores 0 0 0 ============ VELOCIDAD ============ 0 InStr 0.7140104 1 Miseryk 0.7450104 2 Mr Frog 0.7569704 <---- Exploto No se considera... 3 Tenient101 0.7956504 4 Raul338 0.8776904 5 krabby 0.8335704 6 gaston93 7.0439704 7 Tokes v2 0.9286504 8 79137913 1.4048904 9 BlackZeroX 5.6635304 10 Tokes 73.4917704
Temibles Lunas!¡.
|
|
« Última modificación: 1 Enero 2011, 22:34 pm por BlackZeroX▓▓▒▒░░ »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
Jamas podreis superar a InStr()!!! Yo estoy cerca.. pero me falta el empujonzito del ASM inline... me dejais?
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
. La funcion de la Rana al buscar la Letra Ñ No la busca.... por eso es rapida... trabaja con Array's asi que debe ser mayor o Igual a 0 ¬¬# y CBool() toma como true cualquier numero distinto de 0, ya que 0 es false y al buscar una letra... ' Mr. Frog © Private Function myInstrMrFrog(ByVal Start&, ByVal String1$, ByVal String2$) Dim bvString1() As Byte, bvString2() As Byte Dim ls2Len&, lLimit& Dim Q&, C& ls2Len& = ((Len(String2$)) - &H1) If CBool(ls2Len&) Then lLimit& = ((Len(String1$)) - ls2Len&) If lLimit& > 1 Then bvString1 = (VBA.StrConv(String1$, vbFromUnicode)) bvString2 = (VBA.StrConv(String2$, vbFromUnicode)) Q& = (Start& - &H1) Do While (Q& < lLimit&) Do While (bvString1(Q& + C&) = bvString2(C&)) 'Put int_ff , ,ChrW$(bvString1(Q& + C&)); ChrW$(bvString2(C&)) C& = C& + &H1 If ((C& - &H1) = ls2Len&) Then myInstrMrFrog = Q& + &H1 Exit Function End If Loop Q& = (Q& + C&) + &H1 C& = &H0 Loop End If End If End Function
Corrigiendo dicha linea... Con esto se arregla que Explote la funcion al buscar una string Vacia. ' Mr. Frog © Private Function myInstrMrFrog(ByVal Start&, ByVal String1$, ByVal String2$) Dim bvString1() As Byte, bvString2() As Byte Dim ls2Len&, lLimit& Dim Q&, C& ls2Len& = ((Len(String2$)) - &H1) If ls2Len& > -1 Then lLimit& = ((Len(String1$)) - ls2Len&) If lLimit& > 1 Then bvString1 = (VBA.StrConv(String1$, vbFromUnicode)) bvString2 = (VBA.StrConv(String2$, vbFromUnicode)) Q& = (Start& - &H1) Do While (Q& < lLimit&) Do While (bvString1(Q& + C&) = bvString2(C&)) 'Put int_ff , ,ChrW$(bvString1(Q& + C&)); ChrW$(bvString2(C&)) C& = C& + &H1 If ((C& - &H1) = ls2Len&) Then myInstrMrFrog = Q& + &H1 Exit Function End If Loop Q& = (Q& + C&) + &H1 C& = &H0 Loop End If End If End Function
============ RETO INSTR 01/01/2011 - 03:49:20 p.m. ============ String a buscar: col String donde buscar: Baila baila baila como Juana, baila la cubana, parece refresco de cola, a mi me parece que estás bien buena. Nº de vueltas: 250 3 Offsets: 1 10 20 ============ COMPROBACION ============ Valores de InStr: 67 67 67 ============ VELOCIDAD ============ 0 InStr 0.5884212 1 gaston93 2.8621812 2 Mr Frog 4.4889812 3 Raul338 15.8145412 4 BlackZeroX 5.0922212 5 krabby 7.1112212 6 Miseryk 27.8807812 7 Tenient101 15.0253412 8 Tokes v2 15.6543412 9 79137913 17.5959812 10 Tokes 30.6114212 ============ RETO INSTR 01/01/2011 - 03:49:20 p.m. ============ String a buscar: la String donde buscar: Baila baila baila como Juana, baila la cubana, parece refresco de cola, a mi me parece que estás bien buena. Nº de vueltas: 250 3 Offsets: 1 10 20 ============ COMPROBACION ============ Valores de InStr: 4 10 34 ============ VELOCIDAD ============ 0 InStr 1.1657844 1 79137913 1.8203044 2 Tenient101 1.9081844 3 BlackZeroX 2.0457044 4 Raul338 2.0655044 5 Tokes v2 2.4687044 6 Tokes 2.7844644 7 Miseryk 3.3320644 8 Mr Frog 3.7709044 9 gaston93 4.8395844 10 krabby 5.6555444 ============ RETO INSTR 01/01/2011 - 03:49:20 p.m. ============ String a buscar: Ñ String donde buscar: Baila baila baila como Juana, baila la cubana, parece refresco de cola, a mi me parece que estás bien buena. Nº de vueltas: 250 3 Offsets: 1 10 20 ============ COMPROBACION ============ Valores de InStr: 0 0 0 ============ VELOCIDAD ============ 0 InStr 0.4920232 1 gaston93 1.8135032 2 BlackZeroX 1.8769032 3 krabby 2.1987032 4 Mr Frog 3.8963832 5 Raul338 18.0244632 6 Tokes v2 17.9593432 7 79137913 22.1435432 8 Tenient101 23.3084632 9 Tokes 42.3355032 10 Miseryk 82.4681032
Temibles Lunas!¡.
|
|
« Última modificación: 1 Enero 2011, 22:50 pm por BlackZeroX▓▓▒▒░░ »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
Psyke1
Wiki
Desconectado
Mensajes: 1.089
|
Jamas podreis superar a InStr()!!! ============ VELOCIDAD ============ 0 Mr Frog 0.2237288 1 InStr 0.4316488 Aunque fuera en solo un test, le saco el doble... Yo estoy cerca.. pero me falta el empujonzito del ASM inline... me dejais? Tramposo! Ook, puedes ponerlo, así de paso aprendo... @BlackZer0xOops, se me escapo lo de CBool() tienes razón... DoEvents!
|
|
« Última modificación: 2 Enero 2011, 01:54 am por Mr. Frog © »
|
En línea
|
|
|
|
krabby
Desconectado
Mensajes: 22
|
mmmmm se me paso ese detalle de q si se busca cadena vacia el instr siempre devuelve la posicion que le indicamos, black zero nos dio un jalon de orejas, ahora todos a mejorar nuestros codes.
|
|
|
En línea
|
|
|
|
Psyke1
Wiki
Desconectado
Mensajes: 1.089
|
Bueno, dejo mi segunda manera de hacerlo... Private Function InstrMrFrog02&(ByVal Start&, ByVal String1$, ByVal String2$) Dim lTemp&, lenStr1& lenStr1& = VBA.Len(String1$) If CBool(lenStr1&) Then If CBool(VBA.LenB(String2$)) Then lTemp& = Len(VBA.Split(String1$, String2$)(&H0&)) If Not (lTemp& = lenStr1&) Then InstrMrFrog02& = (lTemp& + &H1&) End If End If End If End Function
Creo que sería conveniente no testear casi a cada función que se añade, mejor esperar al final y hacerlo todo de una vez, ¿no? DoEvents!
|
|
« Última modificación: 2 Enero 2011, 01:25 am por Mr. Frog © »
|
En línea
|
|
|
|
Sanlegas
Desconectado
Mensajes: 131
https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-
|
Esto no quedó muy claro ( En principio sin contar con métodos de compración) si te refieres a que no se debe usar estructuras de decisión entonces todos perdimos por usar el if , pero bueno si no es asi se puede usar otra función parecida a la instr Public Function InstrNew2(Start As Integer, Str1 As String, Str2 As String) As Integer InstrNew2 = Len(Str1) - InStrRev(StrReverse(Str1), StrReverse(Str2), Start - 2) + 1 End Function
http://pastebin.ca/2036231Aún así no le gana al instr
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[AYUDA] Usar INSTR 2 veces
Programación Visual Basic
|
Rudy21
|
5
|
2,897
|
9 Julio 2008, 04:01 am
por cassiani
|
|
|
como cargar 100 KBs en una variable; problema con InStr
Programación Visual Basic
|
drakolive
|
5
|
3,047
|
31 Diciembre 2008, 15:20 pm
por Dessa
|
|
|
Instr para byte arrays [src]
Programación Visual Basic
|
cobein
|
3
|
2,315
|
31 Mayo 2009, 12:42 pm
por cobein
|
|
|
Alternativa a pow? [c]
« 1 2 »
Programación C/C++
|
flacc
|
10
|
11,784
|
11 Diciembre 2010, 15:25 pm
por pucheto
|
|
|
[ANSI C] Split(), strlen(), mid(), Instr(), strcpy().
« 1 2 »
Programación C/C++
|
BlackZeroX
|
11
|
10,275
|
14 Enero 2011, 02:35 am
por Littlehorse
|
|