Tras varios intentos infructuosos de registrarme en la página web del Proyecto Euler, y siguiendo a la espera de recibir el correo con la clave de activación, he hecho un poco de Bing y he dado con una página con todos los enunciados en español.
El problema: “Suma todos los números naturales menores que mil que sean múltiplos de 3 ó 5.” no se antoja complicado, pero sí que hacerlo tal cual con JavaScript puro, sin librerías adicionales, queda como algo tristón:
function problema001() {
var totalSuma = 0;
var cmpt;
for (cmpt = 1; cmpt < 1000; cmpt++){
if(cmpt % 3 == 0 || cmpt % 5 == 0) {
totalSuma += cmpt;
}
}
document.write(totalSuma);
}
A mí me ha dado 233.168, pero admito que tengo un poco la sensación de cuando en baloncesto te vas solo y tienes que hacer una entrada fácil… todos los ojos encima de tus hombros, sabiendo que nadie espera que vayas a fallar un balón tan sencillo… XD
Supongo que lo suyo sería algo de refactorización, pero realmente ya en el primer ejercicio encuentro a faltar alguna cosa en mi bagaje con JavaScript, como por ejemplo alguna herramienta de profiling que me permita evaluar el rendimiento de mi código. Entiendo que será un tema complicado, dado que el sandbox en el que se ejecuta mi código no facilita el trabajo, e incluso, puede que dependa del navegador empleado. En todo caso, voy a hacer un poco de investigación para ver que puedo sacar en claro respecto a este tema, sobre todo pensando en problemas más complejos
Pese a todo, mientras no encuentro nada, haré una segunda propuesta, tirando en esta ocasión de recursividad, con la esperanza de rascar algún ciclo de reloj que otro:
function problema001rec(cmpt, totalSuma) {
if (cmpt == 1000)
{
document.write(totalSuma);
}
else
{
if(cmpt % 3 == 0 || cmpt % 5 == 0) {
problema001rec(cmpt + 1, totalSuma + cmpt);
}
else {
problema001rec(cmpt + 1, totalSuma);
}
}
}
Obviamente la función anterior la llamaríamos del siguiente modo:
problema001rec(1, 0)
Pues nada, me llevo deberes ¿alguna sugerencia?
Entrar