From d9e9bf17ab9027eef8d51ff4f75785c5e27d4adc Mon Sep 17 00:00:00 2001 From: Adam Russell Date: Sat, 17 Dec 2022 15:36:25 -0500 Subject: added Prolog solutions --- challenge-195/adam-russell/prolog/ch-1.p | 13 +++++++++++ challenge-195/adam-russell/prolog/ch-2.p | 40 ++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 challenge-195/adam-russell/prolog/ch-1.p create mode 100644 challenge-195/adam-russell/prolog/ch-2.p 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, !. -- cgit