From 840b5dd297556125f499a1b12e373017ef5b59f0 Mon Sep 17 00:00:00 2001 From: Adam Russell Date: Sun, 27 Apr 2025 23:02:51 -0400 Subject: initial commit of Prolog solutions --- challenge-318/adam-russell/blog1.txt | 1 + challenge-318/adam-russell/prolog/ch-1.p | 21 ++++++++++++ challenge-318/adam-russell/prolog/ch-2.p | 56 ++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+) create mode 100644 challenge-318/adam-russell/blog1.txt create mode 100644 challenge-318/adam-russell/prolog/ch-1.p create mode 100644 challenge-318/adam-russell/prolog/ch-2.p diff --git a/challenge-318/adam-russell/blog1.txt b/challenge-318/adam-russell/blog1.txt new file mode 100644 index 0000000000..0f80551133 --- /dev/null +++ b/challenge-318/adam-russell/blog1.txt @@ -0,0 +1 @@ +http://rabbitfarm.com/cgi-bin/blosxom/prolog/2025/04/27 diff --git a/challenge-318/adam-russell/prolog/ch-1.p b/challenge-318/adam-russell/prolog/ch-1.p new file mode 100644 index 0000000000..2584a2dceb --- /dev/null +++ b/challenge-318/adam-russell/prolog/ch-1.p @@ -0,0 +1,21 @@ + + + group(Letters, Letter, Group):- + length(Letters, LengthLetters), + delete(Letters, Letter, Deleted), + length(Deleted, LengthDeleted), + Difference is LengthLetters - LengthDeleted, + Difference >= 3, + length(G1, Difference), + maplist(=(Letter), G1), + append(G1, _, G2), + append(_, G2, Letters), + atom_codes(Group, G1). + group(_, _, nil). + + + groupings(Word, Groupings):- + sort(Word, UniqueLetters), + maplist(group(Word), UniqueLetters, Groups), + delete(Groups, nil, Groupings). + diff --git a/challenge-318/adam-russell/prolog/ch-2.p b/challenge-318/adam-russell/prolog/ch-2.p new file mode 100644 index 0000000000..58d9e91127 --- /dev/null +++ b/challenge-318/adam-russell/prolog/ch-2.p @@ -0,0 +1,56 @@ + + + reverse_equals(List1, List2):- + + subtract(List1, List2, []), + + + length(List1, Length), + findall(I, ( + between(1, Length, I), + nth(I, List1, C1), + nth(I, List2, C2), + \+ C1 = C2 + ), DifferenceIndices), + + + length(DifferenceIndices, NumberDifferences), + NumberDifferences > 0, + nth(1, DifferenceIndices, FirstIndex), + last(DifferenceIndices, LastIndex), + findall(E, ( + between(FirstIndex, LastIndex, I), + nth(I, List1, E) + ), SubList1), + findall(E, ( + between(FirstIndex, LastIndex, I), + nth(I, List2, E) + ), SubList2), + + + reverse(SubList1, Reverse1), + reverse(SubList2, Reverse2), + append(SubList1, Suffix1, S1), + append(SubList2, Suffix2, S2), + append(Reverse1, Suffix1, S3), + append(Reverse2, Suffix2, S4), + append(Prefix1, S1, List1), + append(Prefix2, S2, List2), + (append(Prefix1, S3, List2); append(Prefix2, S4, List1)) +. + reverse_equals(List1, List2):- + + subtract(List1, List2, []), + + + length(List1, Length), + findall(I, ( + between(1, Length, I), + nth(I, List1, C1), + nth(I, List2, C2), + \+ C1 = C2 + ), DifferenceIndices), + + length(DifferenceIndices, NumberDifferences), + NumberDifferences = 0. + -- cgit