aboutsummaryrefslogtreecommitdiff
path: root/challenge-097
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-01-31 23:56:00 +0000
committerGitHub <noreply@github.com>2021-01-31 23:56:00 +0000
commitbc9fa766985b89fb77c109bc8ade15c4b4a5319a (patch)
tree33aff33447a3174710536d8498220823c09e75ad /challenge-097
parent9bc5b6863b0bbbfce07cb174b37a767651b3d1f4 (diff)
parent1a4c1b829cfb002c4df8dc8268898a010b7c4643 (diff)
downloadperlweeklychallenge-club-bc9fa766985b89fb77c109bc8ade15c4b4a5319a.tar.gz
perlweeklychallenge-club-bc9fa766985b89fb77c109bc8ade15c4b4a5319a.tar.bz2
perlweeklychallenge-club-bc9fa766985b89fb77c109bc8ade15c4b4a5319a.zip
Merge pull request #3434 from adamcrussell/challenge-097
Prolog solutions for challenge-097.
Diffstat (limited to 'challenge-097')
-rw-r--r--challenge-097/adam-russell/blog1.txt1
-rw-r--r--challenge-097/adam-russell/prolog/ch-1.p18
-rw-r--r--challenge-097/adam-russell/prolog/ch-2.p33
3 files changed, 52 insertions, 0 deletions
diff --git a/challenge-097/adam-russell/blog1.txt b/challenge-097/adam-russell/blog1.txt
new file mode 100644
index 0000000000..042196e137
--- /dev/null
+++ b/challenge-097/adam-russell/blog1.txt
@@ -0,0 +1 @@
+http://www.rabbitfarm.com/cgi-bin/blosxom/prolog/2021/01/31
diff --git a/challenge-097/adam-russell/prolog/ch-1.p b/challenge-097/adam-russell/prolog/ch-1.p
new file mode 100644
index 0000000000..ec0b531db2
--- /dev/null
+++ b/challenge-097/adam-russell/prolog/ch-1.p
@@ -0,0 +1,18 @@
+:-initialization(main).
+
+caesar([], [], _).
+caesar([H|T], [C|Cypher], N):-
+ C is H - N,
+ C >= 65,
+ caesar(T, Cypher, N).
+caesar([H|T], [C|Cypher], N):-
+ C0 is H - N,
+ C0 < 65,
+ C is C0 + 26,
+ caesar(T, Cypher, N).
+
+main:-
+ caesar("ABCDEFGHIJKLMNOPQRSTUVWXYZ", C, 3),
+ atom_codes(CypherText, C),
+ write(CypherText), nl,
+ halt. \ No newline at end of file
diff --git a/challenge-097/adam-russell/prolog/ch-2.p b/challenge-097/adam-russell/prolog/ch-2.p
new file mode 100644
index 0000000000..6e0fb1c224
--- /dev/null
+++ b/challenge-097/adam-russell/prolog/ch-2.p
@@ -0,0 +1,33 @@
+:-initialization(main).
+
+substrings(BinaryString, N, SubStrings):-
+ substrings(BinaryString, N, [], SubStrings).
+substrings([], _, SubStrings, SubStrings).
+substrings(BinaryString, N, SubStringAccum, SubStrings):-
+ length(L, N),
+ append(L, X, BinaryString),
+ substrings(X, N, [L|SubStringAccum], SubStrings).
+
+count_flips(B, [H|T], Flips):-
+ count_flips(B, [H|T], 0, Flips).
+count_flips(_, [], Flips, Flips).
+count_flips(B, [H|T], FlipsSum, Flips):-
+ number_codes(B0, B),
+ number_codes(H0, H),
+ X is xor(B0, H0),
+ Flips0 is X + FlipsSum,
+ count_flips(B, T, Flips0, Flips).
+
+min_flips(SubStrings, MinFlips):-
+ min_flips(SubStrings, [], Flips),
+ sort(Flips,[MinFlips|_]).
+min_flips([_], Flips, Flips).
+min_flips([H|T], FlipsAccum, Flips):-
+ count_flips(H, T, Flips0),
+ min_flips(T, [Flips0|FlipsAccum], Flips).
+
+main:-
+ substrings("101100101", 3, SubStrings),
+ min_flips(SubStrings, Flips),
+ write(Flips),nl,
+ halt.