# HG changeset patch # User IBBoard # Date 1505419205 -3600 # Node ID f4ea1f637f227753653fcc549db4e813746574ac # Parent 82627dd71c7574d4a95b307022309ef629a9a010 Add answers for 6 and 7 (transpose and write/read matrix) diff -r 82627dd71c75 -r f4ea1f637f22 .hgignore --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgignore Thu Sep 14 21:00:05 2017 +0100 @@ -0,0 +1,1 @@ +2-Io/matrix.txt \ No newline at end of file diff -r 82627dd71c75 -r f4ea1f637f22 2-Io/day2-self-study.io --- a/2-Io/day2-self-study.io Thu Sep 14 20:24:25 2017 +0100 +++ b/2-Io/day2-self-study.io Thu Sep 14 21:00:05 2017 +0100 @@ -127,6 +127,72 @@ my_arr get(5, 5) println +#6) Bonus "transpose" method (ugly and inefficient method) +TwoDList transpose := method( + new_list := TwoDList clone + x := self arr size + y := self arr at(0) size + new_list dim(y, x) + for (i, 0, x - 1, + for (j, 0, y - 1, + new_list set(j, i, self get(i, j)) + ) + ) + return new_list +) + +transposed := my_arr transpose +transposed get(1, 2) println +transposed get(0, 1) println +transposed get(2, 1) println +transposed get(1, 0) println + +#7) Write a matrix to a file and read it back +# Might as well use the TwoDList as a matrix +# Note: This isn't white-space safe, but nvm +TwoDList as_string := method( + x := self arr size + y := self arr at(0) size + #str := "#{self arr size}×#{self arr at(0) size}\n" interpolate + str := "" + for (i, 0, x - 1, + for (j, 0, y - 1, + str = "#{str}#{self get(i, j)} " interpolate + ) + str = "#{str asMutable strip}\n" interpolate + ) +) + +TwoDList load := method(matrix_string, + # strip to make sure that we don't get trailing new lines + rows := matrix_string strip split("\n") + row_count := rows size + # Ugly way to get column count + col_count := rows at(0) split(" ") size + self dim(row_count, col_count) + for (i, 0, row_count - 1, + row := rows at(i) split(" ") + for (j, 0, col_count - 1, + self set(i, j, row at(j)) + ) + ) +) +matrix_file := "matrix.txt" +f := File with(matrix_file) +f remove +f openForUpdating +f write(my_arr as_string) +f flush +f close + +f2 := File with(matrix_file) +f2 openForReading +new_list := TwoDList clone +new_list load(f2 contents) +f2 close +new_list get(1, 2) println +new_list get(0, 1) println + # 4) final piece list(1, 2, 3, "foo") myAverage \ No newline at end of file