[RETO] IsFibonacciNumber(N as long) as Boolean

Iniciado por 79137913, 14 Febrero 2011, 19:42 PM

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

Psyke1

#20
Ook, con trampa creo que gano... :rolleyes:

Código (vb) [Seleccionar]
Private Const sF As String = " 0 1 2 35 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 5702887 9227465 14930352 24157817 39088169 63245986 102334155 165580141 267914296 433494437 701408733 1134903170 1836311903 "

Public Static Function IsFibonacci_WithCache_MrFrog(ByRef lngNum As Long) As Boolean
    IsFibonacci_WithCache_MrFrog = InStrB(1, sF, " " & lngNum & " ")
End Function


DoEvents! :P

ignorantev1.1

Código (vb) [Seleccionar]
Private Const sF As String = "0 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 5702887 9227465 14930352 24157817 39088169 63245986 102334155 165580141 267914296 433494437 701408733 1134903170 1836311903"

Public Static Function IsFibonacci_WithCache_MrFrog(ByRef lngNum As Long) As Boolean
   IsFibonacci_WithCache_MrFrog = InStr(1, sF, lngNum, vbBinaryCompare)
End Function

private sub Form_load()
  msgbox isfibonacci_withcache_mrfrog(4)  '<------ True!!!!!
end sub


Código (vb) [Seleccionar]

Private Const sF As String = " 0 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 5702887 9227465 14930352 24157817 39088169 63245986 102334155 165580141 267914296 433494437 701408733 1134903170 1836311903 "

Function isfibonacciIgno(IngNum As Long) As Boolean
   isfibonacciIgno = InStr(sF, " " & IngNum & " ")
End Function


;)

Psyke1

#22
Ya está corregida. :)

Test:
Option Explicit

Private Const sF As String = " 0 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 5702887 9227465 14930352 24157817 39088169 63245986 102334155 165580141 267914296 433494437 701408733 1134903170 1836311903 "

Function isfibonacciIgno(IngNum As Long) As Boolean
   isfibonacciIgno = InStr(sF, " " & IngNum & " ")
End Function

Public Static Function IsFibonacci_WithCache_MrFrog(ByRef lngNum As Long) As Boolean
   IsFibonacci_WithCache_MrFrog = InStrB(1, sF, " " & lngNum & " ")
End Function

Public Function IsFibonacci_WithCache(ByRef vVal As Long) As Boolean
Dim lng_i          As Long
Dim var_cache()
   var_cache() = Array(0, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733, 1134903170, 1836311903)
   For lng_i = 0 To UBound(var_cache)
       If var_cache(lng_i) = vVal Then IsFibonacci_WithCache = True: Exit For
   Next lng_i
End Function

Public Function FibonacciChecker_eCode(ByRef lNumero As Long) As Boolean
Dim FiSplit() As String
Dim i As Long
Const Fi As String = "0,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368"
FiSplit() = Split(Fi, ",", -1, vbBinaryCompare)

For i = 0 To 23
   If lNumero = CLng(FiSplit(i)) Then FibonacciChecker_eCode = True: Exit Function
   If lNumero < CLng(FiSplit(i)) Then FibonacciChecker_eCode = False: Exit Function
Next i
End Function

Private Sub Form_Load()
If App.LogMode = 0 Then End 'Compile it, stupid!

Dim t As New CTiming
Dim x As Long
   AutoRedraw = True
   
   t.Reset
   For x = 0 To 100000
       IsFibonacci_WithCache_MrFrog x
   Next
   Me.Print "MrFrog", , t.sElapsed
   
   t.Reset
   For x = 0 To 100000
       isfibonacciIgno x
   Next
   Me.Print "ignorantev1.1", , t.sElapsed
   
   t.Reset
   For x = 0 To 100000
       IsFibonacci_WithCache x
   Next
   Me.Print "BlackZer0x", , t.sElapsed
   
   t.Reset
   For x = 0 To 100000
       FibonacciChecker_eCode x
   Next
   Me.Print "Elemental Code", t.sElapsed
End Sub


Resultado:


DoEvents! :P

ignorantev1.1

Código (vb) [Seleccionar]

rivate Const sF As String = "0 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 5702887 9227465 14930352 24157817 39088169 63245986 102334155 165580141 267914296 433494437 701408733 1134903170 1836311903"

Public Static Function IsFibonacci_WithCache_MrFrog(ByRef lngNum As Long) As Boolean
    IsFibonacci_WithCache_MrFrog = InStr(1, sF, (" " & lngNum & " "), vbBinaryCompare)
End Function

private sub form_load()
    msgbox IsFibonacci_WithCache_MrFrog(0) <------ FALSE!!!
    msgbox IsFibonacci_WithCache_MrFrog(1836311903) <------ FALSE!!!
end sub


:xD no me hagas caso  :¬¬

Elemental Code

rana, pone los otros codigos tambien.

No solamente los que buscan en arrays.
Manejando arrays soy un queso.

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

Mis programas

Psyke1

#25
Cita de: Elemental Code en 16 Febrero 2011, 03:46 AM
rana, pone los otros codigos tambien.

No solamente los que buscan en arrays.
Manejando arrays soy un queso.
¿Ya está puestos en la pág anterior no? :huh:

@ignorantev1.1
Dios, soy un desastre, al llamar tu constante igual que la mía, al copiarlo para el test, copié la mía en vez de la tuya... :¬¬

PD: Tabla de resultados actualizada! :D

DoEvents! :P

79137913

#26
HOLA!!!

Creo que ya terminamos :P :

TABLA POSITIVOS Y NEGATIVOS
"******TEST HECHO POR 79137913******"
**PRUEBA CON NUMEROS +/- HASTA EL MAX**
7913: 26,316 msec
BZro: 49,330 msec


Comprobacion de numeros de Fibonacci Positivos:
Ganador    Elemental Code
2do Puesto Mr Frog
3er Puesto 79137913

Comprobacion de numeros de Fibonacci Positivos (trampa):
Ganador    Mr Frog
2do Puesto Ignorante v1.1
3er Puesto BlackZeroX[escala de grises :P]

Comprobacion de numeros de Fibonacci Enteros (+/-):
Ganador 79137913
2do Puesto BlackZeroX[/escala de grises :P]


GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

BlackZeroX

Cita de: 79137913 en 16 Febrero 2011, 12:05 PM
HOLA!!!

Creo que ya terminamos...


Comprobacion de numeros de Fibonacci Enteros (+/-):
Unico Participante 79137913


No me gusto eso ya que mi funcion soporta numeros negativos (los compruevo en bits).

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

79137913

HOLA!!!

@BlackZeroX▓▓▒▒░░ : Sorry no me habia dado cuenta :P.

Ya modifique las cosas

Cita de: 79137913 en 16 Febrero 2011, 12:05 PM
HOLA!!!

Creo que ya terminamos :P :

TABLA POSITIVOS Y NEGATIVOS
"******TEST HECHO POR 79137913******"
**PRUEBA CON NUMEROS +/- HASTA EL MAX**
7913: 26,316 msec
BZro: 49,330 msec


Comprobacion de numeros de Fibonacci Positivos:
Ganador    Elemental Code
2do Puesto Mr Frog
3er Puesto 79137913

Comprobacion de numeros de Fibonacci Positivos (trampa):
Ganador    Mr Frog
2do Puesto Ignorante v1.1
3er Puesto BlackZeroX[escala de grises :P]

Comprobacion de numeros de Fibonacci Enteros (+/-):
Ganador 79137913
2do Puesto BlackZeroX[/escala de grises :P]


GRACIAS POR LEER!!!

GRACIAS POR LEER!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*