aboutsummaryrefslogtreecommitdiff
path: root/problem35.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 /problem35.erl
parent00686037d57eb0a0d5eba6eeb6fcc9692e8b59f6 (diff)
first commit
Diffstat (limited to 'problem35.erl')
-rwxr-xr-xproblem35.erl49
1 files changed, 49 insertions, 0 deletions
diff --git a/problem35.erl b/problem35.erl
new file mode 100755
index 0000000..4944ec4
--- /dev/null
+++ b/problem35.erl
@@ -0,0 +1,49 @@
+-module(problem35).
+-export([solve/0]).
+
+solve() ->
+ Primes = gen_list([3,2],1000000),
+ length(lists:map(fun(X) -> allin(rot(X, []), Primes) end, Primes)).
+
+gen_list(List,Max) ->
+ O = gen_next(List),
+ if
+ O > Max ->
+ List;
+ true ->
+ gen_list([O|List],Max)
+ end.
+
+gen_next(List) ->
+ gen_next(List, lists:max(List) + 1).
+gen_next(List, Next) ->
+ Q = will_divide(Next, List),
+ if
+ Q ->
+ gen_next(List, Next + 1);
+ true ->
+ Next
+ end.
+
+will_divide(_, []) ->
+ false;
+will_divide(Num, [H|T]) ->
+ if
+ Num rem H =:= 0 ->
+ true;
+ true ->
+ will_divide(Num, T)
+ end.
+
+rot(Num, [Num|T]) ->
+ [Num|T];
+rot(Num, []) ->
+ [A|B] = integer_to_list(Num),
+ rot(Num, [list_to_integer(B++[A])]);
+rot(Num, [H|T]) ->
+ [A|B] = integer_to_list(H),
+ rot(Num, [list_to_integer(B++[A]),H|T]).
+
+allin(L1, L2) ->
+ L3 = lists:map(fun(X) -> lists:member(X, L2) end, L1),
+ lists:foldl(fun(X, ASF) -> X and ASF end, true, L3).