aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2025-07-10 09:36:51 +0100
committerGitHub <noreply@github.com>2025-07-10 09:36:51 +0100
commitc80c3ca2f11220d15fe98423b1a03ac2b61a4ba3 (patch)
tree7cc20ec7c143357131de4678446e29fc4ee9184f
parent188539abb4326454a38154bc253923e4135b4a50 (diff)
parent0e0468d81dd4d1bd3388a231d2c36b56005cebf9 (diff)
downloadperlweeklychallenge-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.txt1
-rw-r--r--challenge-328/adam-russell/prolog/ch-1.p48
-rw-r--r--challenge-328/adam-russell/prolog/ch-2.p50
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), !.
+