aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Russell <russella3@wit.edu>2021-05-02 17:08:08 -0400
committerAdam Russell <russella3@wit.edu>2021-05-02 17:08:08 -0400
commit8fe383178379214d5856caa1eb7517bea9f0cdfd (patch)
tree4b546bce8e4c1e3b5639804f76ce7c93e6d3696b
parentaac29da03bf5b9a5aef2d7a384fd5daa209bb92b (diff)
downloadperlweeklychallenge-club-8fe383178379214d5856caa1eb7517bea9f0cdfd.tar.gz
perlweeklychallenge-club-8fe383178379214d5856caa1eb7517bea9f0cdfd.tar.bz2
perlweeklychallenge-club-8fe383178379214d5856caa1eb7517bea9f0cdfd.zip
Solution for Part 2 in Prolog
-rw-r--r--challenge-110/adam-russell/prolog/ch-2.p24
1 files changed, 24 insertions, 0 deletions
diff --git a/challenge-110/adam-russell/prolog/ch-2.p b/challenge-110/adam-russell/prolog/ch-2.p
index e69de29bb2..7b8e9ada0a 100644
--- a/challenge-110/adam-russell/prolog/ch-2.p
+++ b/challenge-110/adam-russell/prolog/ch-2.p
@@ -0,0 +1,24 @@
+/*
+ Write a script to transpose the contents of a given file.
+*/
+:-initialization(main).
+
+transpose(Columns, Transposed):-
+ transpose(Columns, _, Transposed).
+transpose([], Transposed, Transposed).
+transpose([H|T], TransposedAccum, Transposed):-
+ transpose_row(H, TransposedAccum, TransposedAccumNew),
+ reverse(TransposedAccumNew, TransposedAccumNewReversed),
+ transpose(T, TransposedAccumNewReversed, Transposed).
+
+transpose_row(Row, TransposedAccum, RowTranspose):-
+ transpose_row(Row, TransposedAccum, [], RowTranspose).
+transpose_row([], [], RowTranspose, RowTranspose).
+transpose_row([H|T], [HAccum|TAccum], RowTransposeAccum, RowTranspose):-
+ append(HAccum, H, HAccum0),
+ flatten(HAccum0, HAccum1),
+ transpose_row(T, TAccum, [HAccum1 | RowTransposeAccum], RowTranspose).
+
+main:-
+ transpose([[1,2,3],[4,5,6]], Transposed),
+ write(Transposed), nl. \ No newline at end of file