Título: [RETO] Alternativa a Instr() Publicado por: Psyke1 en 31 Diciembre 2010, 21:14 pm Bueno, pues eso, para empezar el año con buen pie propongo este reto, consiste en crear una función que haga lo mismo que Instr(). ;D
(En principio sin contar con métodos de compración) Si hay dudas postear. ;) (http://4.bp.blogspot.com/_SsJppEIafnw/TR0M-9KBR3I/AAAAAAAABEA/eP-VRsUOt_k/s400/000017344445.jpg) DoEvents! :P Título: Re: [RETO] Alternativa a Instr() Publicado por: Miseryk en 31 Diciembre 2010, 22:43 pm Hola, estaba en la otra PC, la llamo MierdBook (NetBook) entonces leí ésto y dije, excelente, puedo pasar mi tiempo con ésto haciendolo desde el Bloc de notas, lo terminé en el bloc y cdo lo probé en la verdadera PC, funcionó sin errores, ni tuve q hacer cambios :D
Código
Feliz año nuevo (Y). Título: Re: [RETO] Alternativa a Instr() Publicado por: TGa. en 31 Diciembre 2010, 23:18 pm Bueno aca les dejo mi codigo. Me conformo con que funcione. Por lo menos pude realizarlo dentro de los pocos conocimientos que tengo ;D ;D
Código
Título: Re: [RETO] Alternativa a Instr() Publicado por: Psyke1 en 1 Enero 2011, 00:25 am Gracias por participar! :D
Aquí dejo la mía (la primera :xD) Código
Código
Está hecha rápida... :silbar: DoEvents! :P Título: Re: [RETO] Alternativa a Instr() Publicado por: Tokes en 1 Enero 2011, 00:34 am Hola, gente:
Aquí dejo mi aporte: Código: Private Function strinstr(ByVal start As Long, ByVal s1 As String, ByVal s2 As String) As Long Dim pos1 As Long, pos2 As Long, long1 As Long, long2 As Long long1 = Len(s1) long2 = Len(s2) pos2 = 1 For pos1 = start To long1 If Mid(s1, pos1, 1) = Mid(s2, pos2, 1) Then pos2 = pos2 + 1 If pos2 > long2 Then strinstr = pos1 - long2 + 1 Exit Function End If Else pos2 = 1 End If Next End Function ¡Feliz Año! Título: Re: [RETO] Alternativa a Instr() Publicado por: Karcrack en 1 Enero 2011, 01:53 am Me da que no vais a poder superar la velocidad de la funcion de VB :P
Código: http://xbeat.net/vbspeed/c_InStr.htm Feliz año nueeeevo!! Título: Re: [RETO] Alternativa a Instr() Publicado por: 79137913 en 1 Enero 2011, 02:02 am HOLA!!!
Bueno por suerte termine antes de año nuevo, por cierto Feliz año a todos (aca son las 2200). No se que veolocidad tiene, pero bueno aca esta: Código
P.D: Mr. Frog, espero consejos :P GRACIAS POR LEER!!! Título: Re: [RETO] Alternativa a Instr() Publicado por: Psyke1 en 1 Enero 2011, 02:27 am Me da que no vais a poder superar la velocidad de la funcion de VB :P Aguafiestas! :laugh:Código: http://xbeat.net/vbspeed/c_InStr.htm Feliz año nueeeevo!! Pero tienes razón, sera difícil superarlo, pero el que más se acerque gana :) Se me ocurrió una nueva forma de hacerlo, mañana posteo... :P DoEvents! :P Título: Re: [RETO] Alternativa a Instr() Publicado por: raul338 en 1 Enero 2011, 02:50 am Código
Se puede optimizar, mañana o mas tarde lo vere :P Subi un proyecto con todos las funciones y una rutina para probarlas.... y la verdad, ni si quiera le ganamos a InStr :xD Código: ============ RETO INSTR 01/01/2011 - 11:19:42 p.m. ============ Nº de vueltas: 250 String donde buscar: Baila baila baila como Juana, baila la cubana, parece refresco de cola, a mi me parece que estás bien buena. 3 Llamadas, cada una con los siguientes parametros en 'start': 1 10 20 === PRUEBA 1 ================ String a buscar: col ============ COMPROBACION ============ InStr: 67 67 67 Los siguientes no devuelven los mismos valores, seguido de su devolucion ============ VELOCIDAD ============ 00 InStr 00,526022 01 Tenient101 02,011307 02 Tokes v2 02,248696 03 BlackZeroX 02,377656 04 Mr Frog(BlackZeroX) 02,381506 05 Raul338 02,476462 06 79137913 02,662523 07 Miseryk 03,857809 08 Tokes 03,988052 09 gaston93 06,426102 10 krabby 06,745615 === PRUEBA 2 ================ String a buscar: la ============ COMPROBACION ============ InStr: 4 10 34 Los siguientes no devuelven los mismos valores, seguido de su devolucion Mr. Frog(b0x) 4 4 4 ============ VELOCIDAD ============ 00 InStr 00,507416 01 Tenient101 02,110754 02 BlackZeroX 02,410378 03 Mr Frog(BlackZeroX) 02,412944 ' No paso la comprobacion 04 Tokes v2 02,450156 05 Raul338 02,522015 06 79137913 02,820355 07 Miseryk 03,936725 08 Tokes 04,002167 09 gaston93 05,453448 10 krabby 07,029840 === PRUEBA 3 ================ String a buscar: Ñ ============ COMPROBACION ============ InStr: 0 0 0 Los siguientes no devuelven los mismos valores, seguido de su devolucion ============ VELOCIDAD ============ 00 InStr 00,742880 01 Mr Frog(BlackZeroX) 02,393055 02 BlackZeroX 02,406528 03 gaston93 02,632368 04 krabby 02,923010 05 Raul338 22,377361 06 Tokes v2 22,565989 07 79137913 27,793681 08 Tenient101 28,396136 09 Tokes 45,295668 10 Miseryk 87,607375 === PRUEBA 4 ================ String a buscar: ============ COMPROBACION ============ InStr: 1 10 20 Los siguientes no devuelven los mismos valores, seguido de su devolucion Miseryk 0 0 0 gaston93 0 0 0 Mr. Frog(b0x) 0 0 0 Tokes 0 0 0 79137913 0 0 0 Tokes(raul338) -1 -1 -1 Tenient101 -1 -1 -1 BlackZeroX 0 0 0 krabby 0 0 0 ============ VELOCIDAD ============ 00 Miseryk 00,173146 ' No paso la comprobacion 01 79137913 00,206509 ' No paso la comprobacion 02 Raul338 00,216133 03 Tenient101 00,232173 ' No paso la comprobacion 04 krabby 00,333544 ' No paso la comprobacion 05 Mr Frog(BlackZeroX) 00,381664 ' No paso la comprobacion 06 Tokes v2 00,406686 07 InStr 00,425934 08 BlackZeroX 01,805356 ' No paso la comprobacion 09 gaston93 02,109471 ' No paso la comprobacion 10 Tokes 36,895304 ' No paso la comprobacion Test made by Raul338. Thanks to BlackZeroX :P El proyecto se puede bajar desde aca :) http://www.mediafire.com/?nnt1jaazilrid1o (http://www.mediafire.com/?nnt1jaazilrid1o) Lo ire actualizando conforme modifiquen/suban funciones :) Título: Re: [RETO] Alternativa a Instr() Publicado por: 79137913 en 1 Enero 2011, 03:14 am HOLA!!!
XD, Me habia olvidado del Exit Function, ahi lo modifique. Ahora me veo un poquito mejor en la tabla :P. P.D1:Vuelvan a hacer la Tabla XD P.D2: Mr. Frog Si estas en Invisible//No conectado, no puedo hablarte :P. GRACIAS POR LEER!!! Título: Re: [RETO] Alternativa a Instr() Publicado por: Tokes en 1 Enero 2011, 04:29 am Saludos:
Aquí les dejo una mejora (creo) del código de raul338. La he llamado Ratok338InStr: Código: Private Function RaTok338InStr(ByVal Start As Long, ByVal s1 As String, ByVal s2 As String) As Long Dim pos1 As Long, long1 As Long, long2 As Long, lim As Long, c As String If Start And &H80000000 Then Start = -Start long1 = Len(s1) long2 = Len(s2) If long1 = 0 Or long2 = 0 Or Start > long1 Or Start = 0 Or long2 > long1 Then RaTok338InStr = -1 Exit Function End If lim = long1 - long2 + 1 c = Mid(s2, 1, 1) For pos1 = Start To lim If Mid(s1, pos1, 1) = c Then If Mid(s1, pos1, long2) = s2 Then RaTok338InStr = pos1 Exit Function End If End If Next End Function Hasta la próxima. Título: Re: [RETO] Alternativa a Instr() Publicado por: Sanlegas en 1 Enero 2011, 05:32 am aca el mio :D
Código: Public Function InstrNew(ByVal Start As Integer, ByVal Str1 As String, ByVal Str2 As String) As Integer If Start = 0 Or Str1 = "" Or Str2 = "" Then InstrNew = -1 Exit Function End If Do While Start <= Len(Str1) If Mid(Str1, Start, Len(Str2)) = Str2 Then InstrNew = Start Exit Function End If Start = Start + 1 Loop End Function una pregunta... como lo pongo con colores :xD? Título: Re: [RETO] Alternativa a Instr() Publicado por: BlackZeroX en 1 Enero 2011, 09:24 am .
mmmm No se que tan rapida sea mi funcion pero cumple su cometido xP Código
Dulces Lunas!¡. . Título: Re: [RETO] Alternativa a Instr() Publicado por: BlackZeroX en 1 Enero 2011, 09:56 am .
Bueno aquí mas corto... ojala nos dejara VB6 usar apuntadores tan facil como en C... asi seria otra historia. Como no quiero gastar mucho el Do Loop o el For Nest por que se gastan ( jaja ) use las Split(). Código
Dulces Lunas!¡. . Título: Re: [RETO] Alternativa a Instr() Publicado por: TGa. en 1 Enero 2011, 10:23 am Listo ya modifique mi funcion tenia un pequeño error, creo que ya no da resultados erroneos.
Título: Re: [RETO] Alternativa a Instr() Publicado por: Psyke1 en 1 Enero 2011, 11:35 am Ya corregi el código (creo), ahora no tengo mucho tiempo. :-\
Pensé que iría más rápido si trabajaba con Bytes... :silbar: :-( Ya haré más versiones. >:D DoEvents! :P Título: Re: [RETO] Alternativa a Instr() Publicado por: krabby en 1 Enero 2011, 13:49 pm hola super bien el reto que has propuesto Mr Frog., aki mi code, esta comentado, lo probe y no tiene fallas.
si le encuentran una falla me dicen y me lanzo del 5to piso. usa la misma sintaxis que el instr() Código: Option Explicit Public Function Rapidash(Posicion As Long, CadenaDondeBuscar As String, MiCadenaBuscar As String) As Long Dim Cadena As String, CadenaBuscar As String Cadena = CadenaDondeBuscar CadenaBuscar = MiCadenaBuscar 'si cadena es menor q cadenabuscar, entonces cadenabuscar no esta 'contenida dentro de cadena If Len(Cadena) < Len(CadenaBuscar) Then Exit Function 'si posicion es mayor a texto, entonces no hay donde buscar 'porque posicion excede el tamaño de la cadena If Posicion > Len(Cadena) Then Exit Function 'posicion debe ser igual o mayor a1 If Posicion < 1 Then Exit Function 'si no hay cadenabuscar salimos If Len(CadenaBuscar) = 0 Then Exit Function 'la cadena serà partida en 2 desde posicion 'en caso de que posicion sea mayor a 1 'es para simplificar el trabajo de busqueda 'extra almacena el tamaño de la primera 'parte del string partido Dim Extra As Long If Posicion > 1 Then 'coge la porcion de cadena indicada por Posicion 'para simplificar la busqueda Cadena = Mid(Cadena, Posicion) Extra = Posicion - 1 End If Dim arrCad() As String, TamCadenaBuscar As Long, Resul As Long TamCadenaBuscar = Len(CadenaBuscar) 'comprueba si la cadena se encuentra al inicio y le suma 'lo Extra en caso de que se haya partido la cadena en 2 y sale If Left(Cadena, TamCadenaBuscar) = CadenaBuscar Then Resul = 1 + Extra Else 'comprueba si la CadenaBuscar existe dentro 'de cadena Dim tmp As String tmp = Replace(Cadena, CadenaBuscar, "") 'si no varia el tamaño kiere decir ' q "NO" se encontro CadenaBuscar y sale 'esto es para no caer en el split 'y se produzca un error al sumar 'el len(arrCad(0)), ya q si split falla 'no habrà el inidce cero "0" If Len(tmp) = Len(Cadena) Then Exit Function End If 'si llega aki entonces se encontro la CadenaBuscar arrCad = Split(Cadena, CadenaBuscar) 'suma el extra y el tamaño 'arrCad(0) simpre va contener el string 'anterior a cadenabuscar, por eso la suma de abajo Resul = Len(arrCad(0)) + 1 + Extra End If Rapidash = Resul End Function Código: Private Sub Form_Load() Dim Pos As Long Dim UnaCadena As String Dim CadenaBuscar As String UnaCadena = "hola que tal viejo, me llamo pepe" CadenaBuscar = "viejo" Pos = Rapidash(1, UnaCadena, CadenaBuscar) MsgBox "Resultado Rapidash: " & Pos Pos = InStr(1, UnaCadena, CadenaBuscar) MsgBox "Resultado InStr: " & Pos End Sub salu2 Título: Re: [RETO] Alternativa a Instr() Publicado por: krabby en 1 Enero 2011, 16:10 pm el proyecto que subieron para probar las funciones tiene errores, lo descargue, y algunos resultados no son correctos.
debajo de main donde dice 'raul388 , pasas los parametros incorrectos: Código: '' ================ COMPROBACION =========================== Debug.Print "============ COMPROBACION ============" cFirst = InStr(firstPos, SearchString, SearchChar) cSecond = InStr(secondPos, SearchString, SearchChar) cThird = InStr(thirdPos, SearchString, SearchChar) Debug.Print "Valores de InStr: ", , cFirst, cSecond, cThird ' Raul338 tFirst = rInStr(firstPos, SearchChar, SearchString) tSecond = rInStr(secondPos, SearchChar, SearchString) tThird = rInStr(thirdPos, SearchChar, SearchString) If tFirst <> cFirst Or tSecond <> cSecond Or tThird <> cThird Then Debug.Print "Raul338 no devuelve los mismos valores", tFirst, tSecond, tThird End If ' Miseryk tFirst = myInstr(firstPos, SearchString, SearchChar) tSecond = myInstr(secondPos, SearchString, SearchChar) tThird = myInstr(thirdPos, SearchString, SearchChar) If tFirst <> cFirst Or tSecond <> cSecond Or tThird <> cThird Then Debug.Print "Miseryk no devuelve los mismos valores", tFirst, tSecond, tThird End If el orden de parametros de instr y myInstr(de Miseryc) son iguales (firstPos, SearchString, SearchChar), pero en el de raul338 esta al reves (firstPos, SearchChar, SearchString). Título: Re: [RETO] Alternativa a Instr() Publicado por: raul338 en 1 Enero 2011, 18:09 pm jeje si, año nuevo, cabeza nueva, pense que toda la vida lo usaba asi y lo puse asi :xD ya cambio la firma
Hay actualizo mi funcion :) Benchmark actualizados 1 Código: ============ 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,864775284178946 Raul338 18,3623837347693 Miseryk 30,7958742805302 gaston93 3,87963529112102 Mr Frog 7,84405750497397 Tokes 30,0233925932865 79137913 20,6618641060995 Tokes v2 17,7496594728775 Tenient101 19,7694039508204 BlackZeroX 5,31231935060211 krabby 7,9775094908101 2 Código: ============ 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,599789684803091 Raul338 3,56973796574262 Miseryk 4,66494248411889 gaston93 6,10917527314349 Mr Frog 4,43525108542018 Tokes 4,75540753220973 79137913 3,40099819519021 Tokes v2 3,20082021643602 Tenient101 2,88387175007523 BlackZeroX 4,6777744058339 krabby 7,79785617083907 3 Código: ============ 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,706294635037691 Raul338 26,3284343194879 Miseryk 95,6028468901517 gaston93 3,07185940320015 Mr Frog 0,653042159920391 Tokes 48,7631246499291 79137913 31,470826946779 Tokes v2 27,1888146704795 Tenient101 35,9883049865489 BlackZeroX 3,53637496928359 krabby 3,62555682520292 y el proyecto con las funciones actualizadas :) http://www.mediafire.com/?bbr7r0s90xmgtp6 (http://www.mediafire.com/?bbr7r0s90xmgtp6) PD: EL codigo exclusivamente de vb se pone asi [code=vb]Dim s as string[/code] Quedando Código
Título: Re: [RETO] Alternativa a Instr() Publicado por: krabby en 1 Enero 2011, 20:12 pm supongo que dices por lo del color, no sabia lo de poner el code =vb, igual no es muy conveniente cuando kieres copiar / pegar un codigo que tiene esas etiquetas, porque en vez de salir los saltos de linea salen unos espacios y hay que editar el codigo poniendo lo saltos correspondientes.
voi a bajar y provar como va ahora tu tester de funciones corregido. un saludo Título: Re: [RETO] Alternativa a Instr() Publicado por: krabby en 1 Enero 2011, 20:32 pm Bien pues el resultado que me dio:
Código: 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, :D :D :D Título: Re: [RETO] Alternativa a Instr() Publicado por: BlackZeroX en 1 Enero 2011, 21:21 pm ...
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... ¬¬# )... Edito No habia visto que eran 3 prubas aqui las dejo... Código
Descargar Proyecto de Pruebas (http://infrangelux.sytes.net/FileX/index.php?dir=/BlackZeroX/Programacion/vb6/Retos/InStr&file=reto.rar) Temibles Lunas!¡. Título: Re: [RETO] Alternativa a Instr() Publicado por: krabby en 1 Enero 2011, 21:41 pm 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 . Título: Re: [RETO] Alternativa a Instr() Publicado por: BlackZeroX en 1 Enero 2011, 21:53 pm 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 (http://infrangelux.sytes.net/FileX/index.php?dir=/BlackZeroX/Programacion/vb6/Retos/InStr&file=Update%20reto.rar) Código
Mi funcion actualizada Código
La Funcion de la RANA Explota cuando se busca una String VACIA Código
Temibles Lunas!¡. Título: Re: [RETO] Alternativa a Instr() Publicado por: Karcrack en 1 Enero 2011, 22:23 pm Jamas podreis superar a InStr()!!! >:D
Yo estoy cerca.. pero me falta el empujonzito del ASM inline... me dejais? :-[ Título: Re: [RETO] Alternativa a Instr() Publicado por: BlackZeroX en 1 Enero 2011, 22:45 pm .
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... Código
Corrigiendo dicha linea... Con esto se arregla que Explote la funcion al buscar una string Vacia. Código
Código
Temibles Lunas!¡. Título: Re: [RETO] Alternativa a Instr() Publicado por: Psyke1 en 1 Enero 2011, 23:34 pm Jamas podreis superar a InStr()!!! >:D Código: ============ VELOCIDAD ============ Aunque fuera en solo un test, le saco el doble... ::) :xD0 Mr Frog 0.2237288 1 InStr 0.4316488 Yo estoy cerca.. pero me falta el empujonzito del ASM inline... me dejais? :-[ Tramposo! :¬¬Ook, puedes ponerlo, así de paso aprendo... :P @BlackZer0x Oops, se me escapo lo de CBool() tienes razón... :silbar: DoEvents! :P Título: Re: [RETO] Alternativa a Instr() Publicado por: krabby en 2 Enero 2011, 01:10 am 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.
Título: Re: [RETO] Alternativa a Instr() Publicado por: Psyke1 en 2 Enero 2011, 01:21 am Bueno, dejo mi segunda manera de hacerlo... :)
Código
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? :huh: DoEvents! :P Título: Re: [RETO] Alternativa a Instr() Publicado por: Sanlegas en 2 Enero 2011, 02:01 am 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 :P, pero bueno si no es asi se puede usar otra función parecida a la instr ;D Código http://pastebin.ca/2036231 (http://pastebin.ca/2036231) Aún así no le gana al instr :¬¬ :xD Título: Re: [RETO] Alternativa a Instr() Publicado por: BlackZeroX en 2 Enero 2011, 02:11 am .
Plagiador pense que no la hibas a poner ¬¬", es en cierta manera IGUAL a la primera que puse, solo que tu usas Len a cada rato ¬¬". Bueno, dejo mi segunda manera de hacerlo... :) Código
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? :huh: DoEvents! :P Teoricamente lo que estas haciendo e slo mismo que yo hice... ¬¬". http://foro.elhacker.net/programacion_visual_basic/reto_alternativa_a_instr-t315420.0.html;msg1562191#msg1562191 Código
Temibles Lunas!¡. Título: Re: [RETO] Alternativa a Instr() Publicado por: Psyke1 en 2 Enero 2011, 02:21 am @Black
No me fije en la tuya para hacerlo, no soy tan descarado... :¬¬ :laugh: Pero ahora que lo dices : sí, son practicamente iguales, esta no cuenta... :P @Tenient101 :xD Me refiero al 4 argumento que trae el Instr() ;) : Código
DoEvents! :P Título: Re: [RETO] Alternativa a Instr() Publicado por: BlackZeroX en 2 Enero 2011, 03:10 am .
No hay problema el algoritmo que te dige trae errores que corregi en mi otro algoritmo http://foro.elhacker.net/programacion_visual_basic/reto_alternativa_a_instr-t315420.0.html;msg1562386#msg1562386 Código
Temibles Lunas!¡. . Título: Re: [RETO] Alternativa a Instr() Publicado por: raul338 en 2 Enero 2011, 03:22 am Alguien deberia hacer limpieza aca :xD
Mejore el sistemita de pruebas, y agrego una prueba mas (gracias BlackZeroX) se busca un string nulo :xD (se pueden hacer mas pruebas, ej buscar "abc" en "a", etc pero habria que modificar mas, hacerlo mas personalizable xD). Y agregue que se ordene automaticamente los resultados :) Código: ============ RETO INSTR 01/01/2011 - 11:19:42 p.m. ============ Nº de vueltas: 250 String donde buscar: Baila baila baila como Juana, baila la cubana, parece refresco de cola, a mi me parece que estás bien buena. 3 Llamadas, cada una con los siguientes parametros en 'start': 1 10 20 === PRUEBA 1 ================ String a buscar: col ============ COMPROBACION ============ InStr: 67 67 67 Los siguientes no devuelven los mismos valores, seguido de su devolucion ============ VELOCIDAD ============ 00 InStr 00,526022 01 Tenient101 02,011307 02 Tokes v2 02,248696 03 BlackZeroX 02,377656 04 Mr Frog(BlackZeroX) 02,381506 05 Raul338 02,476462 06 79137913 02,662523 07 Miseryk 03,857809 08 Tokes 03,988052 09 gaston93 06,426102 10 krabby 06,745615 === PRUEBA 2 ================ String a buscar: la ============ COMPROBACION ============ InStr: 4 10 34 Los siguientes no devuelven los mismos valores, seguido de su devolucion Mr. Frog(b0x) 4 4 4 ============ VELOCIDAD ============ 00 InStr 00,507416 01 Tenient101 02,110754 02 BlackZeroX 02,410378 03 Mr Frog(BlackZeroX) 02,412944 ' No paso la comprobacion 04 Tokes v2 02,450156 05 Raul338 02,522015 06 79137913 02,820355 07 Miseryk 03,936725 08 Tokes 04,002167 09 gaston93 05,453448 10 krabby 07,029840 === PRUEBA 3 ================ String a buscar: Ñ ============ COMPROBACION ============ InStr: 0 0 0 Los siguientes no devuelven los mismos valores, seguido de su devolucion ============ VELOCIDAD ============ 00 InStr 00,742880 01 Mr Frog(BlackZeroX) 02,393055 02 BlackZeroX 02,406528 03 gaston93 02,632368 04 krabby 02,923010 05 Raul338 22,377361 06 Tokes v2 22,565989 07 79137913 27,793681 08 Tenient101 28,396136 09 Tokes 45,295668 10 Miseryk 87,607375 === PRUEBA 4 ================ String a buscar: ============ COMPROBACION ============ InStr: 1 10 20 Los siguientes no devuelven los mismos valores, seguido de su devolucion Miseryk 0 0 0 gaston93 0 0 0 Mr. Frog(b0x) 0 0 0 Tokes 0 0 0 79137913 0 0 0 Tokes(raul338) -1 -1 -1 Tenient101 -1 -1 -1 BlackZeroX 0 0 0 krabby 0 0 0 ============ VELOCIDAD ============ 00 Miseryk 00,173146 ' No paso la comprobacion 01 79137913 00,206509 ' No paso la comprobacion 02 Raul338 00,216133 03 Tenient101 00,232173 ' No paso la comprobacion 04 krabby 00,333544 ' No paso la comprobacion 05 Mr Frog(BlackZeroX) 00,381664 ' No paso la comprobacion 06 Tokes v2 00,406686 07 InStr 00,425934 08 BlackZeroX 01,805356 ' No paso la comprobacion 09 gaston93 02,109471 ' No paso la comprobacion 10 Tokes 36,895304 ' No paso la comprobacion Test made by Raul338. Thanks to BlackZeroX http://www.mediafire.com/?sws0gx764h4xake (http://www.mediafire.com/?sws0gx764h4xake) Modifique 2 lineas de mi funcion tambien! :) Título: Re: [RETO] Alternativa a Instr() Publicado por: krabby en 2 Enero 2011, 03:51 am propongo que para no estar codeando a cada rato haciendo pequeñas mejoras, mejor averiguamos todo lo que hace el instr , luego ponemos a prueba el instr en distintos casos para ver lo que resulta, por ejmplo: que es lo que devuelve cuando se busca cadenas vacias, o que devuelve cuando se le pasa una posicion mayor a la cadena de busqueda, etc... y luego tratamos de igualar, o mejor dicho imitar al instr y despues vemos cual de todos los codes es el mejor.
editado: Mr Frog. anda pensando en otro reto, y lo lanzas despues de este. ;D ;D ;D ;D Título: Re: [RETO] Alternativa a Instr() Publicado por: BlackZeroX en 2 Enero 2011, 07:28 am .
* Si String1 = "" y String2 = "" entonces se retorna 0 * Si String1 <> "" y String = "" entonces; Segun el siguiente caso Si Start = 1 se retorna Start Si Start > 1 se retorna Start * Si string1 = "" y String2 <> "" entonces se retorna 0 * El Caso que falta Son por logica y ya esta hecho... es decir la busqueda pertiente y Retornar 0 si no se encontro o retornar la posicion donde se encontro. Código
editado: Mr Frog. anda pensando en otro reto, y lo lanzas despues de este. tengo uno y se llama zig zag mañana lo pongo... Título: Re: [RETO] Alternativa a Instr() Publicado por: krabby en 2 Enero 2011, 08:36 am Bien pues ... ya son las 2:35 am por aki y me kgo de sueño, mañana espero el reto zig zag (me suena a encriptacion) , pero weno qué será? qué será?
hasta mañana. Título: Re: [RETO] Alternativa a Instr() Publicado por: Karcrack en 2 Enero 2011, 14:53 pm @BlackZeroX▓▓▒▒░░: Hasta donde yo se usar la funcion Len() de VB es mucho mas rapido, ya que VB automaticamente mete un DWORD con el tamaño de la cadena antes de ella :)
Y para todos aquellos que utilizamos un Array... recordad compilar desactivando la comprobacion de seguridad en los Arrays... si no cada vez que haces cualquier acceso al Array comprueba que el tamaño sea mayor que el indice... y eso relentiza mucho ;) Título: Re: [RETO] Alternativa a Instr() Publicado por: Psyke1 en 2 Enero 2011, 20:08 pm @Black
Tiene razón Karcry... testeé velocidad y se nota un ligera tardanza usando api lstrlenW() respecto a Len() de vb. :-\ @karcry http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=30761&lngWId=1 Citar This code runs as much as 5000 times faster than VB's InStr function! :silbar:Jamas podreis superar a InStr()!!! >:D Te lo dedico :-* >:D :laugh: :laugh: :laugh: :laugh:Fue divertido el reto, a ver si retomamos los retos poco a poco en esta sección, que es una forma divertida de pasar el rato y mejorar/aprender... ;D Ahora a por el de Black! :) http://goo.gl/7Wkqb DoEvents! :P Título: Re: [RETO] Alternativa a Instr() Publicado por: raul338 en 3 Enero 2011, 00:28 am Veo que varios usaron Split, sin embargo creo recordar que habiamos puesto un reto tratando de reemplazar a Split :xD
Nose si podriamos juntarlos (no encuetro el thread) :P nose , se me ocurre :) Título: Re: [RETO] Alternativa a Instr() Publicado por: Psyke1 en 3 Enero 2011, 01:08 am Yo el único que lo hice un poco diferente... :silbar:
:xD DoEvents! :P Título: Re: [RETO] Alternativa a Instr() Publicado por: BlackZeroX en 3 Enero 2011, 12:36 pm .
@raul338 Se usaba instr() si no mal recuerdo :silbar: :silbar: :silbar: :silbar: Código
Título: Re: [RETO] Alternativa a Instr() Publicado por: cobein en 3 Enero 2011, 16:57 pm Simplemente para confirmar lo de Karcrack, los string en VB son BSTR y son algo asi
Size/string/terminator 4 bytes/null & char/null & null Si miran el codigo siguiente van a ver que da como resultado 8, 0p0a0p0a Código: Option Explicit Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long) Private Sub Form_Load() Dim s As String s = "papa" Dim lSize As Long CopyMemory lSize, ByVal StrPtr(s) - 4, 4 Debug.Print lSize End Sub Título: Re: [RETO] Alternativa a Instr() Publicado por: Psyke1 en 16 Enero 2011, 18:56 pm Quizá ya un poco tarde... :silbar:
Aqui dejo mi 2ª forma, a diferencia de todas las demas sin depender de Mid(), Split()... Código
Recordar quitar comprobación en los límites de arrays al compilar! Debería haber tambien tests con cadenas laaaargas! :silbar: DoEvents! :P Título: Re: [RETO] Alternativa a Instr() Publicado por: BlackZeroX en 16 Enero 2011, 20:49 pm .
Actualizado: Maravillosa funcion Rana es constante la velocidad y muy rapida!¡. Código: ============ RETO INSTR 16/01/2011 - 02:00:22 p.m. ============ Nº de vueltas: 250 String donde buscar: Baila baila baila como Juana, baila la cubana, parece refresco de cola, a mi me parece que estás bien buena. 3 Llamadas, cada una con los siguientes parametros en 'start': 1 10 20 === PRUEBA 1 ================ String a buscar: col ============ COMPROBACION ============ InStr: 67 67 67 Los siguientes no devuelven los mismos valores, seguido de su devolucion ============ VELOCIDAD ============ 00 InStr 00.376743 01 MrFrogInstrII 01.372423 02 Tokes v2 01.481183 03 Tenient101 01.783343 04 79137913 02.440223 05 Raul338 02.467343 06 Tokes 02.935583 07 Mr Frog(BlackZeroX) 02.983303 08 Miseryk 03.401823 09 gaston93 04.847983 10 krabby 07.554583 11 BlackZeroX 10.427103 === PRUEBA 2 ================ String a buscar: la ============ COMPROBACION ============ InStr: 4 10 34 Los siguientes no devuelven los mismos valores, seguido de su devolucion Mr. Frog(b0x) 4 4 4 ============ VELOCIDAD ============ 00 InStr 00.372905 01 MrFrogInstrII 01.119305 02 79137913 01.813665 03 Tenient101 01.842345 04 Raul338 02.063025 05 Mr Frog(BlackZeroX) 02.113905 ' No paso la comprobacion 06 Tokes v2 02.178465 07 BlackZeroX 02.273225 08 Tokes 03.152145 09 Miseryk 04.123825 10 gaston93 04.935465 11 krabby 05.297945 === PRUEBA 3 ================ String a buscar: Ñ ============ COMPROBACION ============ InStr: 0 0 0 Los siguientes no devuelven los mismos valores, seguido de su devolucion ============ VELOCIDAD ============ 00 InStr 00.602864 01 MrFrogInstrII 01.298824 02 gaston93 01.822624 03 BlackZeroX 02.009944 04 Mr Frog(BlackZeroX) 02.298024 05 krabby 02.540744 06 Tokes v2 17.152344 07 Raul338 17.577024 08 Tenient101 29.506144 09 79137913 31.242144 10 Tokes 37.729504 11 Miseryk 76.273224 === PRUEBA 4 ================ String a buscar: ============ COMPROBACION ============ InStr: 1 10 20 Los siguientes no devuelven los mismos valores, seguido de su devolucion Miseryk 0 0 0 gaston93 0 0 0 Mr. Frog(b0x) 0 0 0 Tokes 0 0 0 79137913 0 0 0 Tokes(raul338) -1 -1 -1 Tenient101 -1 -1 -1 BlackZeroX 0 0 0 krabby 0 0 0 MrFrogInstrII 0 0 0 ============ VELOCIDAD ============ 00 Miseryk 00.147824 ' No paso la comprobacion 01 Raul338 00.161744 02 Tokes v2 00.166224 03 79137913 00.172664 ' No paso la comprobacion 04 Tenient101 00.204504 ' No paso la comprobacion 05 Mr Frog(BlackZeroX) 00.286784 ' No paso la comprobacion 06 krabby 00.326704 ' No paso la comprobacion 07 InStr 00.355224 08 MrFrogInstrII 00.944784 ' No paso la comprobacion 09 BlackZeroX 01.629704 ' No paso la comprobacion 10 gaston93 02.140424 ' No paso la comprobacion 11 Tokes 38.439544 ' No paso la comprobacion Test made by BlackZeroX. Dulces Lunas!¡. Título: Re: [RETO] Alternativa a Instr() Publicado por: Psyke1 en 16 Enero 2011, 20:57 pm Ya corregí la función ahora devuelve lo que tiene que devolver... ;)
Recordar quitar comprobación en los límites de arrays al compilar! Debería haber tambien tests con cadenas laaaargas! :silbar: DoEvents! :P Ninguna función vuestra se acerca tanto Código
(http://img522.imageshack.us/img522/2307/dibujoqgr.jpg) DoEvents! :P |