aboutsummaryrefslogtreecommitdiff
path: root/problem2.erl
diff options
context:
space:
mode:
authorNathan Lasseter <nathan.je.lasseter@googlemail.com>2009-10-04 00:56:56 +0100
committerNathan Lasseter <nathan.je.lasseter@googlemail.com>2009-10-04 00:56:56 +0100
commit0248ed34ce3d05228bc5084669c3a27933be0c2e (patch)
treeb9c4990344b0863a2af851b5917c49f3a5f03e6b /problem2.erl
parent00686037d57eb0a0d5eba6eeb6fcc9692e8b59f6 (diff)
first commit
Diffstat (limited to 'problem2.erl')
-rwxr-xr-xproblem2.erl36
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.