diff options
| author | Adam Russell <ac.russell@live.com> | 2022-12-17 15:36:25 -0500 |
|---|---|---|
| committer | Adam Russell <ac.russell@live.com> | 2022-12-17 15:36:25 -0500 |
| commit | d9e9bf17ab9027eef8d51ff4f75785c5e27d4adc (patch) | |
| tree | 6f5251c09f2059d400fc48fe175e2f7be9b365ca | |
| parent | af3f70f9977b22f2e29cd2ea8da1e43c3904bbb7 (diff) | |
| download | perlweeklychallenge-club-d9e9bf17ab9027eef8d51ff4f75785c5e27d4adc.tar.gz perlweeklychallenge-club-d9e9bf17ab9027eef8d51ff4f75785c5e27d4adc.tar.bz2 perlweeklychallenge-club-d9e9bf17ab9027eef8d51ff4f75785c5e27d4adc.zip | |
added Prolog solutions
| -rw-r--r-- | challenge-195/adam-russell/prolog/ch-1.p | 13 | ||||
| -rw-r--r-- | challenge-195/adam-russell/prolog/ch-2.p | 40 |
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, !. |
