Quiero proponeros una adivinanza y un reto:
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.
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?
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 (vb) [Seleccionar]
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?