aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-306/2colours/prolog/ch-1.p13
-rw-r--r--challenge-306/2colours/prolog/ch-2.p18
2 files changed, 31 insertions, 0 deletions
diff --git a/challenge-306/2colours/prolog/ch-1.p b/challenge-306/2colours/prolog/ch-1.p
new file mode 100644
index 0000000000..0e90897a5d
--- /dev/null
+++ b/challenge-306/2colours/prolog/ch-1.p
@@ -0,0 +1,13 @@
+:- use_module(library(clpfd)).
+
+task1(Ints, Result) :-
+ length(Ints, Max_L),
+ findall(Sum, (
+ N in 1..Max_L,
+ N mod 2 #= 1,
+ indomain(N),
+ length(SA, N),
+ append([_Prefix, SA, _Suffix], Ints),
+ sum_list(SA, Sum)
+ ), Sums),
+ sum_list(Sums, Result).
diff --git a/challenge-306/2colours/prolog/ch-2.p b/challenge-306/2colours/prolog/ch-2.p
new file mode 100644
index 0000000000..465532d012
--- /dev/null
+++ b/challenge-306/2colours/prolog/ch-2.p
@@ -0,0 +1,18 @@
+game([], 0).
+game([Last_Remaining], Last_Remaining).
+game(List, Result) :-
+ length(List, N), N > 1,
+ max_list(List, Max1),
+ once(select(Max1, List, Rest)),
+ max_list(Rest, Max2),
+ once(nth0(Pos2, Rest, Max2, Rest2)),
+ Diff is Max1 - Max2,
+ (Diff =:= 0 ->
+ game(Rest2, Result)
+ ;
+ true ->
+ nth0(Pos2, New_List, Diff, Rest2),
+ game(New_List, Result)
+ ).
+
+task2(Ints, Result) :- game(Ints, Result), !.