diff options
Diffstat (limited to 'problem2.erl')
-rwxr-xr-x | problem2.erl | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/problem2.erl b/problem2.erl new file mode 100755 index 0000000..34f8a1e --- /dev/null +++ b/problem2.erl @@ -0,0 +1,36 @@ +-module(problem2). +-export([solve/0]). + +solve() -> + S = spawn(fun() -> loop([2]) end), + work(S, 4000000, 1, 2). + +work(S, M, X, Y) -> + Z = X + Y, + if + Z > M -> + S ! {self(), done}; + true -> + S ! {self(), Z} + end, + receive + continue -> + work(S, M, Y, Z); + R -> + R + end. + +loop(L) -> + receive + {From , X} when is_integer(X) -> + if + X rem 2 =:= 0 -> + From ! continue, + loop(L++[X]); + true -> + From ! continue, + loop(L) + end; + {From, done} -> + From ! lists:sum(L) + end. |