Random IRC quote :      <@matalaz> radare <@matalaz> yo a veces lo uso también

Please, reverse me!

Alegoría de reverser tallada en bronce
El sábado me quedé con ganas de Hack it en la Euskal . Está mal que lo diga yo, pero formamos un dream team que arrasó con las pruebas finales en tiempo récord, y al final todos nos quedamos deseando que hubieran más pruebas por hacer. Así que mientras regresaba en el metro me puse a pensar en un algoritmo interesante para un «reverse me», y el resultado ha sido este.

Solo adelantaré que no es demasiado difícil, y que hay que desempolvar un poco las matemáticas elementales. ¿Alguna pregunta o comentario…?

2 Comentarios para “Please, reverse me!”

  1. Comment por Tora | 07/24/07 at 3:48 pm

    Pese a que le tengo bastante manía/fobia a las «comas flotantes», he pasado un rato divertido ;D

    Eso sí, vaya palo tener que resolver ecuaciones cuadráticas con dos variables… se nota que uno se va haciendo mayor para esto, je je

    Por cierto, enhorabuena al «dream team» y a los que siguen soñando con números romanos xDDD

  2. Comment por Miguel | 07/24/07 at 6:00 pm

    Bueno, pues con el reverseme he pasado un rato divertido. A pesar de que en teoria el reverseme deberia tener dos soluciones, si lo analizamos sobre el papel, lo cierto es que solo he encontrado una solucion valida. La «314-314». La segunda solucion no funciona debido a los problemas derivados del redondeo y del uso de una aritmetica finita. Y para el caso complejo x2=0 aunque matematicamente no tiene soluciones reales, quizas seria posible encontrar una solucion basada en overlfows?? Es una paranoia que se me esta ocurriendo segun voy escribiendo, asi que no me hagais mucho caso.
    En mi caso lo que hice fue resolver primero la segunda ecuacion, 1/log(x1/x2), que deberia provocar una division por 0 para ser valida. De esa ecuacion encuentro tres posibles soluciones. x2=0, x1=x2 o x1 muy aproximado a x2. Dejando de lado las aproximaciones, tenemos que la primera parte se puede expresar como una ecuacion de segundo grado. Para x2=0 la ecuacion resultante tiene un coeficiente b muy alto respecto a c, con lo que no tendra soluciones en el campo real. Por esta razon opte por x1=x2, y con una pequeña implementacion de regula-falsi(que aunque me equivoque con la implementacion del test de parada, encuentra correctamente las soluciones) solo tuve que derivar para encontrar el minimo, definir dos zonas de busqueda usando el minimo como extremo, y encontrar las dos soluciones 314.000000…0001 y 317.20000….0001. Esta segunda no consigue el resultado puesto que el redondeo te hunde en la miseria, pero con la primera solucion.. bingo!!!… lo dicho, 314-314

Se han cerrado los comentarios