aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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