[RETO] + Funcion Extraer Numeros de Cadenas!

Iniciado por x64core, 4 Enero 2012, 23:06 PM

0 Miembros y 5 Visitantes están viendo este tema.

seba123neo

Cita de: RHL - 该0在 en  6 Enero 2012, 03:07 AM
Las pruebas en tiempo de ejecucion no?
creo que solo así se podra comparar una que solo se obtiene el resultado en tiempo de ejecucion que otra desde el IDE.. :P
Corroborar :P

las probe compilado a las 2 funciones.

La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

BlackZeroX

#31
Cita de: RHL - 该0在 en  6 Enero 2012, 03:07 AM
Las pruebas en tiempo de ejecucion no?
creo que solo así se podra comparar una que solo se obtiene el resultado en tiempo de ejecucion que otra desde el IDE.. :P
Corroborar :P

Por si las moscas comprubelas COMPILADAS no desde el IDE, aun asi tanto la de Karcr... y la de un servidor NO FUNCIONAN desde el IDE...

Dulces Lunas!¡.
The Dark Shadow is my passion.

BlackZeroX

#32
...
Esta es la ultima que pongo lo PROMETO!¡.

Esta modificada segun el Prototipo...

Código (vb) [Seleccionar]


Public Function getNumbers3(ByRef sIn As String) As String
Dim thisWord(0) As Integer  '   //  Un caracter = 2 bytes = integer
Dim thisRet(0)  As Long     '   //  jejeje...
Dim dwOffSetGet As Long     '   //  Offset Get caracter...
Dim dwOffSetSet As Long     '   //  Offset Set caracter...
Dim wWord       As Integer  '   //  Letra en asc...
Dim dwLenI      As Long     '   //  Longitud en bytes de sIn...
Dim lpAux       As Long     '   //  Auxiliar...
Dim dwRetLen    As Long     '   //  jejeje...
   
    dwOffSetGet = ((StrPtr(sIn) - VarPtr(thisWord(&H0&))) \ &H2&)
    dwOffSetSet = dwOffSetGet
    dwLenI = LenB(sIn)

    If (dwLenI) Then
        Do
            If (dwLenI And &H80000000) Then Exit Do

            wWord = thisWord(dwOffSetGet)

            If (wWord >= &H30) Then
                If (wWord <= &H39) Then
                    dwRetLen = (dwRetLen + &H2&)
                    thisWord(dwOffSetSet) = wWord
                    dwOffSetSet = (dwOffSetSet + &H1&)
                End If
            End If

            dwOffSetGet = (dwOffSetGet + &H1&)
            dwLenI = (dwLenI - &H2&)

        Loop While (wWord > &H0&)

        thisWord(dwOffSetSet) = &H0&
        lpAux = ((VarPtr(sIn) - VarPtr(thisRet(&H0&))) \ &H4&)
        thisRet(((StrPtr(sIn) - VarPtr(thisRet(&H0&))) \ &H4&) - &H1&) = dwRetLen
        thisRet(((VarPtr(getNumbers3) - VarPtr(thisRet(&H0&))) \ &H4&)) = thisRet(lpAux)
        thisRet(lpAux) = &H0&
    End If
   
End Function



Temibles Lunas!¡.
The Dark Shadow is my passion.

Karcrack

Voy a arriesgar: BlackZeroX tu código no funcionará siempre :P Y si funciona es de suerte :P

Te arriesgas a que por alguna razón VB6 te meta el array de words en una dirección impar y a partir de ahí todos tus accesos ya no son correctos >:D

BlackZeroX

#34
Cita de: Karcrack en  6 Enero 2012, 13:44 PM
Voy a arriesgar: BlackZeroX tu código no funcionará siempre :P Y si funciona es de suerte :P

Te arriesgas a que por alguna razón VB6 te meta el array de words en una dirección impar y a partir de ahí todos tus accesos ya no son correctos >:D

Te equivocas y muy feo esta vez... ya que cuando se hace un acceso a memoria de un array se hace siguiento esta forma si no mal me quivoco

AddressBase + Index * sizeof(Tipo)

Donde AddressBase es el Indice 0 del array...

Revisala y dale un debug... que la verdad a mi tambien de dio unos dolores de cabeza debido a que el tipo del array lo cambien de un array tipo byte a uno integer y a uno long es decir de 1 byte a 2 bytes y a 4 bytes...

Código (Vb) [Seleccionar]


Option Explicit

Private Sub Command1_Click()
Dim sStr    As String
Dim i       As Long
Dim lpLast  As Long

    Show
   
    For i = 0 To 500
        sStr = " 1234567890"  ' // Nos tiene que devolver esactamente LO MISMO...
        lpLast = StrPtr(sStr)
        Text1.Text = i & vbTab & lpLast & vbTab & getNumbers3(sStr) & vbCrLf & Text1.Text
        DoEvents
        Caption = i
    Next i
   
    sStr = "hola54 mundo5412"
    MsgBox getNumbers3(sStr)
    MsgBox sStr
   
    End     '   //  Fozamos...
End Sub



Output:



500 2353284 1234567890
499 2353404 1234567890
498 2353364 1234567890
497 2353324 1234567890
496 2353284 1234567890
495 2353404 1234567890
494 2353364 1234567890
493 2353324 1234567890
492 2353284 1234567890
491 2353404 1234567890
490 2353364 1234567890
489 2353324 1234567890
488 2353284 1234567890
487 2353404 1234567890
486 2353364 1234567890
485 2353324 1234567890
484 2353284 1234567890
483 2353404 1234567890
482 2353364 1234567890
481 2353324 1234567890
480 2353284 1234567890
479 2353404 1234567890
478 2353364 1234567890
477 2353324 1234567890
476 2353284 1234567890
475 2353404 1234567890
474 2353364 1234567890
473 2353324 1234567890
472 2353284 1234567890
471 2353404 1234567890
470 2353364 1234567890
469 2353324 1234567890
468 2353284 1234567890
467 2353404 1234567890
466 2353364 1234567890
465 2353324 1234567890
464 2353284 1234567890
463 2353404 1234567890
462 2353364 1234567890
461 2353324 1234567890
460 2353284 1234567890
459 2353404 1234567890
458 2353364 1234567890
457 2353324 1234567890
456 2353284 1234567890
455 2353404 1234567890
454 2353364 1234567890
453 2353324 1234567890
452 2353284 1234567890
451 2353404 1234567890
450 2353364 1234567890
449 2353324 1234567890
448 2353284 1234567890
447 2353404 1234567890
446 2353364 1234567890
445 2353324 1234567890
444 2353284 1234567890
443 2353404 1234567890
442 2353364 1234567890
441 2353324 1234567890
440 2353284 1234567890
439 2353404 1234567890
438 2353364 1234567890
437 2353324 1234567890
436 2353284 1234567890
435 2353404 1234567890
434 2353364 1234567890
433 2353324 1234567890
432 2353284 1234567890
431 2353404 1234567890
430 2353364 1234567890
429 2353324 1234567890
428 2353284 1234567890
427 2353404 1234567890
426 2353364 1234567890
425 2353324 1234567890
424 2353284 1234567890
423 2353404 1234567890
422 2353364 1234567890
421 2353324 1234567890
420 2353284 1234567890
419 2353404 1234567890
418 2353364 1234567890
417 2353324 1234567890
416 2353284 1234567890
415 2353404 1234567890
414 2353364 1234567890
413 2353324 1234567890
412 2353284 1234567890
411 2353404 1234567890
410 2353364 1234567890
409 2353324 1234567890
408 2353284 1234567890
407 2353404 1234567890
406 2353364 1234567890
405 2353324 1234567890
404 2353284 1234567890
403 2353404 1234567890
402 2353364 1234567890
401 2353324 1234567890
400 2353284 1234567890
399 2353404 1234567890
398 2353364 1234567890
397 2353324 1234567890
396 2353284 1234567890
395 2353404 1234567890
394 2353364 1234567890
393 2353324 1234567890
392 2353284 1234567890
391 2353404 1234567890
390 2353364 1234567890
389 2353324 1234567890
388 2353284 1234567890
387 2353404 1234567890
386 2353364 1234567890
385 2353324 1234567890
384 2353284 1234567890
383 2353404 1234567890
382 2353364 1234567890
381 2353324 1234567890
380 2353284 1234567890
379 2353404 1234567890
378 2353364 1234567890
377 2353324 1234567890
376 2353284 1234567890
375 2353404 1234567890
374 2353364 1234567890
373 2353324 1234567890
372 2353284 1234567890
371 2353404 1234567890
370 2353364 1234567890
369 2353324 1234567890
368 2353284 1234567890
367 2353404 1234567890
366 2353364 1234567890
365 2353324 1234567890
364 2353284 1234567890
363 2353404 1234567890
362 2353364 1234567890
361 2353324 1234567890
360 2353284 1234567890
359 2353404 1234567890
358 2353364 1234567890
357 2353324 1234567890
356 2353284 1234567890
355 2353404 1234567890
354 2353364 1234567890
353 2353324 1234567890
352 2353284 1234567890
351 2353404 1234567890
350 2353364 1234567890
349 2353324 1234567890
348 2353284 1234567890
347 2353404 1234567890
346 2353364 1234567890
345 2353324 1234567890
344 2353284 1234567890
343 2353404 1234567890
342 2353364 1234567890
341 2353324 1234567890
340 2353284 1234567890
339 2353404 1234567890
338 2353364 1234567890
337 2353324 1234567890
336 2353284 1234567890
335 2353404 1234567890
334 2353364 1234567890
333 2353324 1234567890
332 2353284 1234567890
331 2353404 1234567890
330 2353364 1234567890
329 2353324 1234567890
328 2353284 1234567890
327 2353404 1234567890
326 2353364 1234567890
325 2353324 1234567890
324 2353284 1234567890
323 2353404 1234567890
322 2353364 1234567890
321 2353324 1234567890
320 2353284 1234567890
319 2353404 1234567890
318 2353364 1234567890
317 2353324 1234567890
316 2353284 1234567890
315 2353404 1234567890
314 2353364 1234567890
313 2353324 1234567890
312 2353284 1234567890
311 2353404 1234567890
310 2353364 1234567890
309 2353324 1234567890
308 2353284 1234567890
307 2353404 1234567890
306 2353364 1234567890
305 2353324 1234567890
304 2353284 1234567890
303 2353404 1234567890
302 2353364 1234567890
301 2353324 1234567890
300 2353284 1234567890
299 2353404 1234567890
298 2353364 1234567890
297 2353324 1234567890
296 2353284 1234567890
295 2353404 1234567890
294 2353364 1234567890
293 2353324 1234567890
292 2353284 1234567890
291 2353404 1234567890
290 2353364 1234567890
289 2353324 1234567890
288 2353284 1234567890
287 2353404 1234567890
286 2353364 1234567890
285 2353324 1234567890
284 2353284 1234567890
283 2353404 1234567890
282 2353364 1234567890
281 2353324 1234567890
280 2353284 1234567890
279 2353404 1234567890
278 2353364 1234567890
277 2353324 1234567890
276 2353284 1234567890
275 2353404 1234567890
274 2353364 1234567890
273 2353324 1234567890
272 2353284 1234567890
271 2353404 1234567890
270 2353364 1234567890
269 2353324 1234567890
268 2353284 1234567890
267 2353404 1234567890
266 2353364 1234567890
265 2353324 1234567890
264 2353284 1234567890
263 2353404 1234567890
262 2353364 1234567890
261 2353324 1234567890
260 2353284 1234567890
259 2353404 1234567890
258 2353364 1234567890
257 2353324 1234567890
256 2353284 1234567890
255 2353404 1234567890
254 2353364 1234567890
253 2353324 1234567890
252 2353284 1234567890
251 2353404 1234567890
250 2353364 1234567890
249 2353324 1234567890
248 2353284 1234567890
247 2353404 1234567890
246 2353364 1234567890
245 2353324 1234567890
244 2353284 1234567890
243 2353404 1234567890
242 2353364 1234567890
241 2353324 1234567890
240 2353284 1234567890
239 2353404 1234567890
238 2353364 1234567890
237 2353324 1234567890
236 2353284 1234567890
235 2353404 1234567890
234 2353364 1234567890
233 2353324 1234567890
232 2353284 1234567890
231 2353404 1234567890
230 2353364 1234567890
229 2353324 1234567890
228 2353284 1234567890
227 2353404 1234567890
226 2353364 1234567890
225 2353324 1234567890
224 2353284 1234567890
223 2353404 1234567890
222 2353364 1234567890
221 2353324 1234567890
220 2353284 1234567890
219 2353404 1234567890
218 2353364 1234567890
217 2353324 1234567890
216 2353284 1234567890
215 2353404 1234567890
214 2353364 1234567890
213 2353324 1234567890
212 2353284 1234567890
211 2353404 1234567890
210 2353364 1234567890
209 2353324 1234567890
208 2353284 1234567890
207 2353404 1234567890
206 2353364 1234567890
205 2353324 1234567890
204 2353284 1234567890
203 2353404 1234567890
202 2353364 1234567890
201 2353324 1234567890
200 2353284 1234567890
199 2353404 1234567890
198 2353364 1234567890
197 2353324 1234567890
196 2353284 1234567890
195 2353404 1234567890
194 2353364 1234567890
193 2353324 1234567890
192 2353284 1234567890
191 2353404 1234567890
190 2353364 1234567890
189 2353324 1234567890
188 2353284 1234567890
187 2353404 1234567890
186 2353364 1234567890
185 2353324 1234567890
184 2353284 1234567890
183 2353404 1234567890
182 2353364 1234567890
181 2353324 1234567890
180 2353284 1234567890
179 2353404 1234567890
178 2353364 1234567890
177 2353324 1234567890
176 2353284 1234567890
175 2353404 1234567890
174 2353364 1234567890
173 2353324 1234567890
172 2353284 1234567890
171 2353404 1234567890
170 2353364 1234567890
169 2353324 1234567890
168 2353284 1234567890
167 2353404 1234567890
166 2353364 1234567890
165 2353324 1234567890
164 2353284 1234567890
163 2353404 1234567890
162 2353364 1234567890
161 2353324 1234567890
160 2353284 1234567890
159 2353404 1234567890
158 2353364 1234567890
157 2353324 1234567890
156 2353284 1234567890
155 2353404 1234567890
154 2353364 1234567890
153 2353324 1234567890
152 2353284 1234567890
151 2353404 1234567890
150 2353364 1234567890
149 2353324 1234567890
148 2353284 1234567890
147 2353404 1234567890
146 2353364 1234567890
145 2353324 1234567890
144 2353284 1234567890
143 2353404 1234567890
142 2353364 1234567890
141 2353324 1234567890
140 2353284 1234567890
139 2353404 1234567890
138 2353364 1234567890
137 2353324 1234567890
136 2353284 1234567890
135 2353404 1234567890
134 2353364 1234567890
133 2353324 1234567890
132 2353284 1234567890
131 2353404 1234567890
130 2353364 1234567890
129 2353324 1234567890
128 2353284 1234567890
127 2353404 1234567890
126 2353364 1234567890
125 2353324 1234567890
124 2353284 1234567890
123 2353404 1234567890
122 2353364 1234567890
121 2353324 1234567890
120 2353284 1234567890
119 2353404 1234567890
118 2353364 1234567890
117 2353324 1234567890
116 2353284 1234567890
115 2353404 1234567890
114 2353364 1234567890
113 2353324 1234567890
112 2353284 1234567890
111 2353404 1234567890
110 2353364 1234567890
109 2353324 1234567890
108 2353284 1234567890
107 2353404 1234567890
106 2353364 1234567890
105 2353324 1234567890
104 2353284 1234567890
103 2353404 1234567890
102 2353364 1234567890
101 2353324 1234567890
100 2353284 1234567890
99 2353404 1234567890
98 2353364 1234567890
97 2353324 1234567890
96 2353284 1234567890
95 2353404 1234567890
94 2353364 1234567890
93 2353324 1234567890
92 2353284 1234567890
91 2353404 1234567890
90 2353364 1234567890
89 2353324 1234567890
88 2353284 1234567890
87 2353404 1234567890
86 2353364 1234567890
85 2353324 1234567890
84 2353284 1234567890
83 2353404 1234567890
82 2353364 1234567890
81 2353324 1234567890
80 2353284 1234567890
79 2353404 1234567890
78 2353364 1234567890
77 2353324 1234567890
76 2353284 1234567890
75 2353404 1234567890
74 2353364 1234567890
73 2353324 1234567890
72 2353284 1234567890
71 2353404 1234567890
70 2353364 1234567890
69 2353324 1234567890
68 2353284 1234567890
67 2353404 1234567890
66 2353364 1234567890
65 2353324 1234567890
64 2353284 1234567890
63 2353404 1234567890
62 2353364 1234567890
61 2353324 1234567890
60 2353284 1234567890
59 2353404 1234567890
58 2353364 1234567890
57 2353324 1234567890
56 2353284 1234567890
55 2353404 1234567890
54 2353364 1234567890
53 2353324 1234567890
52 2353284 1234567890
51 2353404 1234567890
50 2353364 1234567890
49 2353324 1234567890
48 2353284 1234567890
47 2353404 1234567890
46 2353364 1234567890
45 2353324 1234567890
44 2353284 1234567890
43 2353404 1234567890
42 2353364 1234567890
41 2353324 1234567890
40 2353284 1234567890
39 2353404 1234567890
38 2353364 1234567890
37 2353324 1234567890
36 2353284 1234567890
35 2353404 1234567890
34 2353364 1234567890
33 2353324 1234567890
32 2353284 1234567890
31 2353404 1234567890
30 2353364 1234567890
29 2353324 1234567890
28 2353284 1234567890
27 2353404 1234567890
26 2353364 1234567890
25 2353324 1234567890
24 2353284 1234567890
23 2353404 1234567890
22 2353364 1234567890
21 2353324 1234567890
20 2353284 1234567890
19 2353404 1234567890
18 2353364 1234567890
17 2353324 1234567890
16 2353284 1234567890
15 2353404 1234567890
14 2353364 1234567890
13 2353324 1234567890
12 2353284 1234567890
11 2353404 1234567890
10 2353364 1234567890
9 2353324 1234567890
8 2353284 1234567890
7 2353404 1234567890
6 2353364 1234567890
5 2353324 1234567890
4 2353284 1234567890
3 2353404 1234567890
2 2353364 1234567890
1 2353324 1234567890
0 2353284 1234567890



Dulces Lunas!¡.
The Dark Shadow is my passion.

Karcrack

Ha habido una confusión xD Pensaba que accedías al Integer usando un Array de Bytes :P Mi error :P

x64core

#36

@Karcrack
si puedes cambias tu funcion segun el prototipo :P
Function MYfunction ( STR as string ) as string

de todos modos aun se pueden hacer actualizaciones hasta el dia de mañana ^^

EDIT:
Mi mov ya no sirvio T_T con el prototipo bueno para la proxima :P
Los resultados hasta ahora:



79137913:

1:0.435
2:0.432
3:0.436
4:0.430
5:0.436

BlackZeroX:

1:0.147
2:0.148
3:0.148
4:0.148
5:0.148

Elemental Code:

1:13.151
2:13.351
3:13.195
4:13.369
5:13.352

RHL:

1:0.629
2:0.632
3:0.629
4:0.629
5:0.629




Falta Karcrack que modifique el prototipo, tambien seba123neo :) o alguien mas que se desee unir al reto :)

Elemental Code


I CODE FOR $$$
Programo por $$$
Hago tareas, trabajos para la facultad, lo que sea en VB6.0

Mis programas

Karcrack

Código (vb) [Seleccionar]
Private Static Function kGetNums(ByVal s As String) As String
   Dim bv(0)   As Byte
   Dim pbv     As Long
   Dim rps     As Long
   Dim i       As Long
   Dim b       As Byte
   Dim w       As Long
   
   kGetNums = s

   If pbv = 0 Then pbv = VarPtr(bv(0))

   rps = StrPtr(kGetNums) - pbv

   For i = 0 To LenB(kGetNums) Step 10
       b = bv(rps + i + 0)
       If b >= &H30 Then
           If b <= &H39 Then
               bv(rps + w) = b
               w = w + 2
           End If
       End If
       b = bv(rps + i + 2)
       If b >= &H30 Then
           If b <= &H39 Then
               bv(rps + w) = b
               w = w + 2
           End If
       End If
       b = bv(rps + i + 4)
       If b >= &H30 Then
           If b <= &H39 Then
               bv(rps + w) = b
               w = w + 2
           End If
       End If
       b = bv(rps + i + 6)
       If b >= &H30 Then
           If b <= &H39 Then
               bv(rps + w) = b
               w = w + 2
           End If
       End If
       b = bv(rps + i + 8)
       If b >= &H30 Then
           If b <= &H39 Then
               bv(rps + w) = b
               w = w + 2
           End If
       End If
   Next i

   bv(rps + w) = 0
End Function


Deberías probar la velocidad de los códigos en unas 10000 ejecuciones... ya que ahí es donde se ve mejor la diferencia de velocidades :)

seba123neo

Cita de: RHL en  7 Enero 2012, 01:25 AM
Falta Karcrack que modifique el prototipo, tambien seba123neo :) o alguien mas que se desee unir al reto :)

ni hace falta la mia con RegEx es super lenta, te podes ir a comer y volver y todavia no termino, la puse simplemente por ponerla, no me acorde que era por velocidad.

yo probe las de Karcrack y BlackZeroX, ahora les paso los test, con 10 mil vueltas, con un millon y 10 millones (personalmente me gustan las funciones que siguen funcionado veloces sin importar la cantidad de interaciones que haga, algunas solo rinden en pocas iteraciones y despues en muchas se ponen lentas.)

la ultima de Karcrack, me crashea, ya le deshabilite lo de las matrices, pero igual.

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson