24 de noviembre de 2013

Factorial digit sum - Project Euler, problema 20

La descripción de este problema:





una solución en python es lo mas sencillo, así que la verdad hice "trampa", porque no se de que forma podría manejar números tan grandes en octave, en matlab se supone que hay un toolbox simbólico; y un "clon" de este toolbox para octave, pero al parecer no me funciona (si alguien tiene idea de como usarlo le agradecería me explicara). Una solución completa en python:

from operator import mul
fact=lambda n: reduce(mul,range(1,n+1))
sum(map(int,list(str(fact(100)))))

ahora, si queremos usar octave a la fuerza (xD), podemos generar la lista para usarla en octave así

from operator import mul
fact=lambda n: reduce(mul,range(1,n+1))
map(int,list(str(fact(100))))

como pueden ver solamente removí la suma. Una vez generada la lista podemos hacer lo siguiente en octave:

d=[9, 3, 3, 2, 6, 2, 1, 5, 4, 4, 3, 9, 4, 4, 1, 5, 2, 6, 8, 1, 6, 9, 9, 2, 3, 8, 8, 5, 6, 2, 6, 6, 7, 0, 0, 4, 9, 0, 7, 1, 5, 9, 6, 8, 2, 6, 4, 3, 8, 1, 6, 2, 1, 4, 6, 8, 5, 9, 2, 9, 6, 3, 8, 9, 5, 2, 1, 7, 5, 9, 9, 9, 9, 3, 2, 2, 9, 9, 1, 5, 6, 0, 8, 9, 4, 1, 4, 6, 3, 9, 7, 6, 1, 5, 6, 5, 1, 8, 2, 8, 6, 2, 5, 3, 6, 9, 7, 9, 2, 0, 8, 2, 7, 2, 2, 3, 7, 5, 8, 2, 5, 1, 1, 8, 5, 2, 1, 0, 9, 1, 6, 8, 6, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
sum(d)