/* Euler #20 in Picat. Problem 20 """ n! means n (n 1) ... 3 2 1 Find the sum of the digits in the number 100!") """ This Picat model was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import util. main => go. go => time(euler20f). euler20 => euler20f. euler20a => println(sum([I.to_integer() : I in 100.factorial().to_string()])). % using fold directly euler20b => println(sum([I.to_integer() : I in fold(*,1,2..100).to_string()])). euler20c => println(map(to_integer, fold(*,1,2..100).number_chars()).sum()). % using map2/2 for nicer chaining euler20d => println(fold(*,1,2..100).to_string().map(to_integer).sum()). % using reduce euler20e => println(reduce(*,2..100).to_string().map(to_integer).sum()). % using recursion euler20f => e20f(100.factorial().to_string(), 0, Sum), println(Sum). e20f([],Sum0,Sum) => Sum = Sum0. e20f([H|T],Sum0,Sum) => Sum1 = Sum0+H.to_integer(), e20f(T,Sum1,Sum).