diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2025-07-10 09:36:51 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-10 09:36:51 +0100 |
| commit | c80c3ca2f11220d15fe98423b1a03ac2b61a4ba3 (patch) | |
| tree | 7cc20ec7c143357131de4678446e29fc4ee9184f | |
| parent | 188539abb4326454a38154bc253923e4135b4a50 (diff) | |
| parent | 0e0468d81dd4d1bd3388a231d2c36b56005cebf9 (diff) | |
| download | perlweeklychallenge-club-c80c3ca2f11220d15fe98423b1a03ac2b61a4ba3.tar.gz perlweeklychallenge-club-c80c3ca2f11220d15fe98423b1a03ac2b61a4ba3.tar.bz2 perlweeklychallenge-club-c80c3ca2f11220d15fe98423b1a03ac2b61a4ba3.zip | |
Merge pull request #12317 from adamcrussell/challenge-328
added Prolog solutions
| -rw-r--r-- | challenge-328/adam-russell/blog1.txt | 1 | ||||
| -rw-r--r-- | challenge-328/adam-russell/prolog/ch-1.p | 48 | ||||
| -rw-r--r-- | challenge-328/adam-russell/prolog/ch-2.p | 50 |
3 files changed, 99 insertions, 0 deletions
diff --git a/challenge-328/adam-russell/blog1.txt b/challenge-328/adam-russell/blog1.txt new file mode 100644 index 0000000000..0ebee5ae39 --- /dev/null +++ b/challenge-328/adam-russell/blog1.txt @@ -0,0 +1 @@ +http://www.rabbitfarm.com/cgi-bin/blosxom/prolog/2025/07/09 diff --git a/challenge-328/adam-russell/prolog/ch-1.p b/challenge-328/adam-russell/prolog/ch-1.p new file mode 100644 index 0000000000..0f2c1cc7a8 --- /dev/null +++ b/challenge-328/adam-russell/prolog/ch-1.p @@ -0,0 +1,48 @@ + + + replacement(Replacement), [Replacement] --> [Replacement]. + replacement(R, Replacement), [Replacement] --> [R]. + + + replace(Input) --> replacement(R, Replacement), + {\+ R == [], + Input = [C, CNext|T], + C == 63, + random(97, 123, C0), + last(R, CPrevious), + \+ C0 == CPrevious, + \+ C0 == CNext, + append(R, [C0], Replacement) + }, + replace([CNext|T]). + replace(Input) --> replacement(R, Replacement), + {R == [], + Input = [C, CNext|T], + C == 63, + random(97, 123, C0), + \+ C0 == CNext, + append(R, [C0], Replacement) + }, + replace([CNext|T]). + replace(Input) --> replacement(R, Replacement), + {Input = [C|T], + \+ C == 63, + append(R, [C], Replacement) + }, + replace(T). + replace(Input) --> replacement(R, Replacement), + {Input = [C|T], + C == 63, + random(97, 123, C0), + last(R, CPrevious), + \+ C0 == CPrevious, + append(R, [C0], Replacement) + }, + replace(T). + replace([]) --> []. + + + replace_qs(S, Replaced):- + phrase(replace(S), [[]], [ReplacedCodes]), + atom_codes(Replaced, ReplacedCodes). + diff --git a/challenge-328/adam-russell/prolog/ch-2.p b/challenge-328/adam-russell/prolog/ch-2.p new file mode 100644 index 0000000000..6520c6f0b8 --- /dev/null +++ b/challenge-328/adam-russell/prolog/ch-2.p @@ -0,0 +1,50 @@ + + + bad_pair([], _):- false. + bad_pair(S, P):- + member(X, S), + member(Y, S), + \+ X == Y, + nth(I, S, X), + nth(J, S, Y), + succ(I, J), + (X is Y + 32; X is Y - 32), P = [I, J], !. + + + deletion(Deletion), [Deletion] --> [Deletion]. + deletion(D, Deletion), [Deletion] --> [D]. + + + make_good(S) --> deletion(D, Deletion), + {D == [], \+ S == [], Deletion = S}, + make_good(S). + make_good(S) --> deletion(D, Deletion), + {\+ D == [], + bad_pair(S, P), + [I, _] = P, + I > 1, + prefix(Prefix, S), + length(Prefix, I0), + I0 is I - 1, + append(Prefix, [_, _|Rest], S), + append(Prefix, Rest, Deletion) + }, + make_good(Deletion). + make_good(S) --> deletion(D, Deletion), + {\+ D == [], + bad_pair(S, P), + [I, _] = P, + I == 1, + append([_, _], Deletion, S) + }, + make_good(Deletion). + make_good(S) --> deletion(_, Deletion), + {\+ bad_pair(S, _), + Deletion = S}. + make_good([]) --> []. + + + make_good_string(S, Good):- + phrase(make_good(S), [[]], [GoodCodes]), + atom_codes(Good, GoodCodes), !. + |
