Skip to content

Instantly share code, notes, and snippets.

@devnoo
Created November 27, 2011 11:07
Show Gist options
  • Save devnoo/1397415 to your computer and use it in GitHub Desktop.
Save devnoo/1397415 to your computer and use it in GitHub Desktop.
Seven languages in seven weeks : Solutions IO Day2 two dimensional list
Matrix := Object clone
Matrix dim := method (x,y,
if (self proto == "Object", return Matrix clone dim(x, y))
self internalList := List clone;
self size_x := x;
self size_y := y;
for(i, 1, y,
internalList append(List clone setSize(x));
)
return self
)
Matrix set := method(x,y,value,
self internalList at(x) atPut( y, value)
)
Matrix get := method(x,y,
self internalList at(x) at(y)
)
Matrix transpose := method(
result := Matrix clone dim(size_y,size_x);
for (i, 0, size_y -1 ,
for (j, 0, size_x -1,
result set(j, i, self get(i, j))
)
);
return result
)
Matrix print := method(
internalList foreach(element,
first := true;
element foreach(subelement,
if (first, subelement print; first = false, ", " print; subelement print)
)
"" println
)
)
Matrix toFile := method(file,
file := File openForUpdating(file)
internalList foreach(element,
first := true;
element foreach(subelement,
if (first, file write(subelement asString) ; first = false, file write (", " .. ( subelement asString)))
)
file write("\n")
)
file close
)
Matrix fromFile := method(file,
file := File open(file)
result := Matrix clone
result internalList = List clone
file foreachLine(line,
result internalList append (line splitNoEmpties(","));
)
file close
return result
)
twoDimList := Matrix dim(2,3)
twoDimList set(0, 0, 1)
twoDimList set(0, 1, 2)
twoDimList set(1, 0, 3)
twoDimList set(1, 1, 4)
twoDimList set(2, 0, 5)
twoDimList set(2, 1, 6)
twoDimList print
transposed := twoDimList transpose
transposed print
transposed toFile("transposed.txt")
fromFile := Matrix fromFile("transposed.txt")
fromFile print
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment