Adivinanza: ¿Que hace esta función que he inventado?
Os dejo las variables con nombres descriptivos para que podais seguirla mejor.
Los mas iniciados seguro que lo adivinan en un vistazo y se ríen de mis métodos.
El caso es que a veces se me enciende la bombilla, pero parpadea mucho
Reto: Mejorar esta función. Fácil.
No es que tenga demasiado interés en que sea más rápida, aunque me gustaría ver el sistema que usaría alguien con conocimientos de matemáticas (o igual hay una API para esto ). Yo en el colegio nunca presté atención
He pensado que son dos buenos retos.
Espero que os animéis muchos.
Si se me ocurre como, yo también la intentaré mejorar (bueno, mas rápido ya se me está ocurriendo: puedo quitar los xor si copio 2 veces el código... o quizás no).
Haced vuestras propias versiones una vez que sepais lo que hace.
Código
Function DimeQueHago(ByVal Valor1 As Long, ByVal Valor2 As Long, Trits As Integer) As Long Dim Acu As Integer Dim Bloque As Long Dim Bloque2 As Long Valor1 = Valor1 + 1 ' yo lo uso sin Valor2 = Valor2 + 1 ' estas 2 lineas If Valor2 > Valor1 Then Valor1 = Valor1 Xor Valor2 Valor2 = Valor1 Xor Valor2 Valor1 = Valor1 Xor Valor2 End If Bloque = (3 ^ Trits) / 3 Do Until Bloque = 1 Bloque2 = Bloque * 2 If Valor1 > Bloque2 Then Valor1 = Valor1 - Bloque2 If Valor2 > Bloque2 Then Valor2 = Valor2 - Bloque2 Else Acu = Acu + 1 If Valor2 > Bloque Then Valor2 = Valor2 - Bloque End If GoTo Sort End If If Valor1 > Bloque Then Valor1 = Valor1 - Bloque If Valor2 > Bloque Then Valor2 = Valor2 - Bloque Else Acu = Acu + 1 End If End If Sort: If Valor2 > Valor1 Then Valor1 = Valor1 Xor Valor2 Valor2 = Valor1 Xor Valor2 Valor1 = Valor1 Xor Valor2 End If Bloque = Bloque / 3 Loop If Valor1 = Valor2 Then Else Acu = Acu + 1 End If DimeQueHago = Acu End Function
Lo dicho. Animaos y usad el coco un poco.
Saludos
EDIT:
¿que pasa?
¿no os interesa?
¿estáis deliberando?
¿me he pasado con el reto?
Igual no es tan fácil como pensé.
¿queréis que diga la solución?
¿queréis una pista?