aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Russell <adamcrussell@outlook.com>2025-07-09 19:27:56 -0400
committerAdam Russell <adamcrussell@outlook.com>2025-07-09 19:27:56 -0400
commit0e0468d81dd4d1bd3388a231d2c36b56005cebf9 (patch)
tree8f818e33d57140c4e5a9e117d7322a8c49b1cc6f
parent688341b2e99676d72fb2754bdc25733f086aa38a (diff)
downloadperlweeklychallenge-club-0e0468d81dd4d1bd3388a231d2c36b56005cebf9.tar.gz
perlweeklychallenge-club-0e0468d81dd4d1bd3388a231d2c36b56005cebf9.tar.bz2
perlweeklychallenge-club-0e0468d81dd4d1bd3388a231d2c36b56005cebf9.zip
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), !.
+