aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-195/adam-russell/prolog/ch-1.p13
-rw-r--r--challenge-195/adam-russell/prolog/ch-2.p40
2 files changed, 53 insertions, 0 deletions
diff --git a/challenge-195/adam-russell/prolog/ch-1.p b/challenge-195/adam-russell/prolog/ch-1.p
new file mode 100644
index 0000000000..fbafd20a40
--- /dev/null
+++ b/challenge-195/adam-russell/prolog/ch-1.p
@@ -0,0 +1,13 @@
+code2digit(C, D):-
+ number_codes(D, [C]).
+
+special(N):-
+ number_codes(N, NCodes),
+ maplist(code2digit, NCodes, Digits),
+ sort(Digits, DigitsSorted),
+ length(Digits, NumberDigits),
+ length(DigitsSorted, NumberDigits).
+
+number_special(N, NumberSpecial):-
+ findall(I, (between(1, N, I), special(I)), Specials),
+ length(Specials, NumberSpecial).
diff --git a/challenge-195/adam-russell/prolog/ch-2.p b/challenge-195/adam-russell/prolog/ch-2.p
new file mode 100644
index 0000000000..8af05aeacc
--- /dev/null
+++ b/challenge-195/adam-russell/prolog/ch-2.p
@@ -0,0 +1,40 @@
+even(N, Even):-
+ (0 is mod(N, 2), Even = N);
+ (Even = nil).
+
+frequency(ListNumbers, N, Frequency):-
+ delete(ListNumbers, N, ListDeleted),
+ length(ListNumbers, L),
+ length(ListDeleted, LD),
+ Frequency is L - LD.
+
+most_frequent_even(ListNumbers, MostFrequentEven):-
+ maplist(even, ListNumbers, EN),
+ delete(EN, nil, EvenNumbers),
+ length(EvenNumbers, LengthEvens),
+ LengthEvens > 0,
+ maplist(frequency(ListNumbers), EvenNumbers, Frequencies),
+ msort(Frequencies, FS),
+ reverse(FS, FrequenciesSorted),
+ ((
+ nth(1, FrequenciesSorted, F1),
+ nth(2, FrequenciesSorted, F2),
+ F1 \== F2,
+ nth(N, Frequencies, F1),
+ nth(N, EvenNumbers, MostFrequentEven)
+ );
+ (
+ nth(1, FrequenciesSorted, F1),
+ nth(2, FrequenciesSorted, F2),
+ F1 == F2,
+ nth(N1, Frequencies, F1),
+ nth(N2, Frequencies, F2),
+ nth(N1, EvenNumbers, MostFrequentEven1),
+ nth(N2, EvenNumbers, MostFrequentEven2),
+ ((MostFrequentEven1 < MostFrequentEven2, MostFrequentEven = MostFrequentEven1);
+ (MostFrequentEven1 > MostFrequentEven2, MostFrequentEven = MostFrequentEven2))
+ )
+ ), !.
+
+most_frequent_even(_, MostFrequentEven):-
+ MostFrequentEven = -1, !.