elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [RETO] Comprobar si un numero dado es un numero de la suerte
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 4 5 6 Ir Abajo Respuesta Imprimir
Autor Tema: [RETO] Comprobar si un numero dado es un numero de la suerte  (Leído 21,714 veces)
Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
[RETO] Comprobar si un numero dado es un numero de la suerte
« en: 11 Agosto 2010, 00:55 am »

Antes que nada:
Código:
http://es.wikipedia.org/wiki/N%C3%BAmero_de_la_suerte

La función ha de recibir el numero (LONG) y devolver True o False (BOOLEAN) en caso de que sea o no un numero de la suerte

El reto es a ver quien consigue hacer la comprobacion mas rapida :)
Es un reto similar a este, pero las propiedades de los numeros de la suerte son distintas


Suerte, y yo voy a preparar ahora mi codigo :)


« Última modificación: 11 Agosto 2010, 01:06 am por Karcrack » En línea

[Zero]
Wiki

Desconectado Desconectado

Mensajes: 1.082


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: [RETO] Comprobar si un numero dado es un numero de la suerte
« Respuesta #1 en: 11 Agosto 2010, 01:12 am »

¿Como medimos el tiempo?  :huh: Interesante propuesta, me pongo a ello  ;D.

Saludos


En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: [RETO] Comprobar si un numero dado es un numero de la suerte
« Respuesta #2 en: 11 Agosto 2010, 01:20 am »

¿Como medimos el tiempo?  :huh: Interesante propuesta, me pongo a ello  ;D.

Saludos
Código:
http://www.xbeat.net/vbspeed/download/CTiming.zip
http://www.xbeat.net/vbspeed/details.htm#How I Time

Lo mas seguro es que si puede Seba revise los tiempos, es recomendable hacer todas las pruebas desde el mismo PC :D
En línea

[Zero]
Wiki

Desconectado Desconectado

Mensajes: 1.082


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: [RETO] Comprobar si un numero dado es un numero de la suerte
« Respuesta #3 en: 11 Agosto 2010, 02:09 am »

¿Pero sólo se puede en VB o puedes medir mi código en ASM?

Saludos
En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: [RETO] Comprobar si un numero dado es un numero de la suerte
« Respuesta #4 en: 11 Agosto 2010, 02:49 am »

El algoritmo se las trae!! Despues de casi una hora he conseguido una version que no optimizada al maximo... aqui esta:
Código
  1. Option Explicit
  2. Option Base 1
  3.  
  4. Public Static Function IsItLucky(ByVal lNumb As Long) As Boolean
  5.    Dim bvSieve()   As Byte
  6.    Dim lJump       As Long
  7.    Dim lLastNumb   As Long
  8.    Dim i           As Long
  9.    Dim iCount      As Long
  10.    Dim xCount      As Long
  11.    Dim x           As Long
  12.  
  13.    If lNumb = 1 Or lNumb = 3 Then IsItLucky = True: Exit Function
  14.  
  15.    If (lNumb And 1 = 0) Then Exit Function
  16.  
  17.    If lJump = 0 Then lJump = 2
  18.  
  19.    If lLastNumb < lNumb Then
  20.        ReDim Preserve bvSieve(lNumb)
  21.  
  22.        iCount = 0
  23.        xCount = 1
  24.  
  25.        Do
  26.            For i = 1 To lNumb
  27.                If bvSieve(i) = False Then iCount = iCount + 1
  28.                If iCount = lJump Then
  29.                    bvSieve(i) = True
  30.                    iCount = 0
  31.                End If
  32.            Next i
  33.            iCount = 0
  34.            xCount = xCount + 1
  35.            For i = 1 To lNumb
  36.                If bvSieve(i) = False Then
  37.                    x = x + 1
  38.                    If x = xCount Then
  39.                        lJump = i
  40.                        x = 0
  41.                        Exit For
  42.                    End If
  43.                End If
  44.            Next i
  45.        Loop Until xCount > lJump
  46.    End If
  47.  
  48.    IsItLucky = Not bvSieve(lNumb)
  49.  
  50.    lLastNumb = lNumb
  51. End Function
  52.  

¿Pero sólo se puede en VB o puedes medir mi código en ASM?

Saludos
Si consigues hacerlo en ASM tranquilo que sabras como medir el tiempo con QueryPerformanceCounter >:D  :xD :xD
 :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: No son horas para estar por el foro... madre mia.. habia creado el tema en A&D de Malware, mejor sera que me vaya a dormir :-[  :laugh: :laugh: :laugh:
« Última modificación: 11 Agosto 2010, 02:52 am por Karcrack » En línea

EddyW

Desconectado Desconectado

Mensajes: 187



Ver Perfil WWW
Re: [RETO] Comprobar si un numero dado es un numero de la suerte
« Respuesta #5 en: 11 Agosto 2010, 03:15 am »

He probado tu código, pero me da mal los resultados,
Código:
1, 3, 7, 9, 13, 15, 21, 25, 31, 33, 37, 43, 49, 51, 63, 67, 69, 73, 75, 79, 87, 93, 99...

A la primera vez si intentas con 1,3,7,9,13, el 15 no sale, y si vuelves a intentar algún numero no da, no se si me expliqué, pero no funca bien.

Trabajo ahora en el mio :D

SaluDOS!!!
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [RETO] Comprobar si un numero dado es un numero de la suerte
« Respuesta #6 en: 11 Agosto 2010, 03:21 am »

me uno aqui pondre el mio!¡.

P.D.: Esta algo canijo xP...

Ducles Lunas!¡.
En línea

The Dark Shadow is my passion.
LeandroA
Moderador
***
Desconectado Desconectado

Mensajes: 760


www.leandroascierto.com


Ver Perfil WWW
Re: [RETO] Comprobar si un numero dado es un numero de la suerte
« Respuesta #7 en: 11 Agosto 2010, 07:52 am »

bueno para quemar algunas neuras (quedan poquitas  >:() , no testie la velocidad pero me conformo con que ande  ;D

Código
  1. Private Function IsLuckyNumber(ByVal Num As Long) As Boolean
  2.  
  3.    Dim lCount As Long, lPos As Long
  4.    Dim c As New Collection
  5.  
  6.    If Num < 1 Then Exit Function
  7.    If Num Mod 2 = 0 Then Exit Function
  8.  
  9.    For lPos = 1 To Num Step 2
  10.        c.Add lPos
  11.    Next
  12.  
  13.    lCount = 1
  14.  
  15.    Do While c.Count > lCount
  16.  
  17.        lCount = lCount + 1
  18.        lPos = c(lCount)
  19.  
  20.        Do
  21.            If lPos > c.Count Then Exit Do
  22.            c.Remove lPos
  23.            lPos = lPos + c(lCount) - 1
  24.        Loop
  25.  
  26.        If c(c.Count) <> Num Then Exit Function
  27.    Loop
  28.  
  29.    IsLuckyNumber = True
  30.  
  31. End Function
  32.  

uso:

Código
  1. Private Sub Form_Load()
  2.    Dim i As Long
  3.    Dim s As String
  4.    For i = 1 To 200
  5.        If IsLuckyNumber(i) Then
  6.            s = s & i & " "
  7.        End If
  8.    Next
  9.    Debug.Print s
  10. End Sub

Saludos.
« Última modificación: 12 Agosto 2010, 04:09 am por LeandroA » En línea

Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: [RETO] Comprobar si un numero dado es un numero de la suerte
« Respuesta #8 en: 11 Agosto 2010, 14:51 pm »

Me apunto!!!  :D

DoEvents¡! :P
En línea

Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: [RETO] Comprobar si un numero dado es un numero de la suerte
« Respuesta #9 en: 12 Agosto 2010, 13:35 pm »

Bueno, ya lo tengo... :D
Citar
El algoritmo se las trae!!
Ya te digo, me costó bastante... :-\

Traigo DOS formas de hacerlo:

1ª Forma:
Es como yo lo haría, que mas "chulo" con Collections:
Código
  1. Option Explicit
  2.  
  3. Public Function Check_Lucky_Number(ByVal lNumber As Long) As Boolean
  4.    Dim cTemp                   As New Collection
  5.    Dim NextElim                As Long
  6.    Dim m                       As Long
  7.    Dim x                       As Long
  8.  
  9.    If lNumber = 1 Or lNumber = 3 Then
  10.        GoTo IsLucky
  11.    ElseIf (lNumber > 1) And (lNumber Mod 2 <> 0) Then
  12.        With cTemp
  13.            For x = 1 To lNumber Step 2
  14.                .Add x
  15.            Next
  16.            NextElim = 3 : m = 2
  17.            Do
  18.                x = NextElim
  19.                Do While x <= .Count
  20.                    .Remove (x)
  21.                    x = x + (NextElim - 1)
  22.                Loop
  23.                If .Item(.Count) = lNumber Then
  24.                    m = m + 1
  25.                    NextElim = .Item(m)
  26.                Else
  27.                    Exit Function
  28.                End If
  29.            Loop While Not NextElim > .Count
  30.        End With
  31. IsLucky: Check_Lucky_Number = True
  32.    End If
  33. End Function

2ª Forma:
Aqui utilizo un Array:

Código
  1. Option Explicit
  2. Public Function Check_Lucky_Number2(ByVal lNumber As Long) As Boolean
  3.    Dim lTempArray()            As Long
  4.    Dim NextElim                As Long
  5.    Dim m                       As Long
  6.    Dim x                       As Long
  7.  
  8.    If lNumber = 1 Or lNumber = 3 Then
  9.        GoTo IsLucky
  10.    ElseIf (lNumber > 1) And (lNumber Mod 2 <> 0) Then
  11.        m = 1
  12.        For x = 1 To lNumber Step 2
  13.            ReDim Preserve lTempArray(m)
  14.            lTempArray(m) = x
  15.            m = m + 1
  16.        Next
  17.        NextElim = 3 : m = 2
  18.        Do
  19.            x = NextElim
  20.            Do While x <= UBound(lTempArray)
  21.                Call Delete_Array_Item(lTempArray, x)
  22.                x = x + (NextElim - 1)
  23.            Loop
  24.            If lTempArray(UBound(lTempArray)) = lNumber Then
  25.                m = m + 1
  26.                NextElim = lTempArray(m)
  27.            Else
  28.                Exit Function
  29.            End If
  30.        Loop While Not NextElim > UBound(lTempArray)
  31. IsLucky: Check_Lucky_Number2 = True
  32.    End If
  33. End Function
  34. ' Esto lo hace MUY lento... :( Mirar sig version en la pág siguiente ;)
  35. Private Sub Delete_Array_Item(ByRef lArray() As Long, ByVal lIndex As Long)
  36.    Dim lCount      As Long
  37.    Dim x           As Long
  38.  
  39.    lCount = UBound(lArray)
  40.    If lIndex <= lCount And lIndex >= LBound(lArray) Then
  41.        For x = lIndex To lCount - 1
  42.            lArray(x) = lArray(x + 1)
  43.        Next
  44.        ReDim Preserve lArray(lCount - 1)
  45.    End If
  46. End Sub



Para probarlas:
Código
  1. Private Sub Form_Load()
  2.    Dim x           As Long
  3.    Dim sResult     As String
  4.  
  5.    For x = 1 To 200
  6.        'If Check_Lucky_Number2(x) Then
  7.        If Check_Lucky_Number(x) Then
  8.            sResult = sResult & x & " "
  9.        End If
  10.    Next
  11.    Debug.Print sResult
  12. End Sub

Ambas me devuelven esto:
Citar
1 3 7 9 13 15 21 25 31 33 37 43 49 51 63 67 69 73 75 79 87 93 99 105 111 115 127 129 133 135 141 151 159 163 169 171 189 193 195

DoEvents¡! :P
« Última modificación: 13 Agosto 2010, 16:59 pm por *PsYkE1* » En línea

Páginas: [1] 2 3 4 5 6 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Convertidor de número literal a número real
Programación C/C++
david_BS 0 2,410 Último mensaje 6 Mayo 2012, 21:34 pm
por david_BS
ayuda con un numero que se repita
Programación C/C++
daniel010 2 2,225 Último mensaje 13 Septiembre 2013, 03:02 am
por GenR_18
saber primer numero y ultimo numero [solucionado]
Bases de Datos
basickdagger 4 4,095 Último mensaje 3 Septiembre 2014, 17:19 pm
por basickdagger
Generar numeros que contengan un numero dado x « 1 2 »
Programación C/C++
GoBrit 13 5,183 Último mensaje 17 Enero 2015, 02:28 am
por engel lex
Invertir un número dado
Programación C/C++
BortizF 3 2,784 Último mensaje 18 Octubre 2017, 16:20 pm
por BortizF
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines