30/05/2010, 23:14
|
| Javascripter | | Fecha de Ingreso: abril-2009 Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses Puntos: 1485 | |
Respuesta: Fibo(1000): códigos y comentarios. ¡llego el momento que todos -o al menos yo- hemos estado espeando, el momento de la verdad!
Código:
sum = function(a, b){
if(Math.max(a.length, b.length) <= 14) return String(Number(a) + Number(b));
var serie = "", nth = "", reg = /\d{1,14}$/, pack = [];
while(a || b){
a = a.replace(reg, function(m){ pack.push(m); return "";});
b = b.replace(reg, function(m){ pack.push(m); return "";});
var sum = String(Number(pack.shift() || 0) + Number(pack.shift() || 0) + Number(nth));
while(sum.length < 14)sum = "0" + sum;
if(sum.length > 14){
nth = sum.substring(0,1);
sum = sum.replace(/^\d/, "");
}else nth = "";
serie = sum + serie;
}
return (nth + serie).replace(/^0*/, "");
}
fib = function(n){
if(!m.hasOwnProperty(n)) m[n] = sum(arguments.callee(n - 1), arguments.callee(n - 2));
return m[n];
}
m = {0:"0", 1:"1"};
cabe mencionar que tengo tres versiones relativamente distintas. cada una fue un intento de reducir el tiempo de respuesta y aumentar la eficiencia. esta que presento es la tercera version. en esta solucion me base en empaquetamiento de cifras manejable por javascript sin perder precision.
__________________ la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad. |