diff options
author | Guillermo Ramos | 2012-04-02 20:48:33 +0200 |
---|---|---|
committer | Guillermo Ramos | 2012-04-02 20:48:33 +0200 |
commit | 8ae4691e677414843cf3a84d4327d303fe3e2f41 (patch) | |
tree | 6007373b702ece4100819606a82ecbae76ff1dd5 | |
parent | fdd1e7abacd96d9bd49c13b2ecfcfe897546acae (diff) | |
download | 7l-8ae4691e677414843cf3a84d4327d303fe3e2f41.tar.gz |
[Io] Día 2
-rw-r--r-- | io/addmatrix.io | 21 | ||||
-rw-r--r-- | io/animals.io | 19 | ||||
-rw-r--r-- | io/divbyzero.io | 14 | ||||
-rw-r--r-- | io/fib.io | 23 | ||||
-rw-r--r-- | io/guess.io | 26 | ||||
-rw-r--r-- | io/matrix.io | 74 | ||||
-rw-r--r-- | io/myAverage.io | 15 | ||||
-rw-r--r-- | io/unless.io | 5 |
8 files changed, 197 insertions, 0 deletions
diff --git a/io/addmatrix.io b/io/addmatrix.io new file mode 100644 index 0000000..9944b75 --- /dev/null +++ b/io/addmatrix.io @@ -0,0 +1,21 @@ +List deepSum := method( + total := 0 + self foreach(e, + if(e type == "List") then( + total = total + e deepSum + ) else( + total = total + e + ) + ) + return total +) + +a := list(1,2,3) +b := list(4,5,6) +c := list(7,8,9) +a deepSum println +b deepSum println +c deepSum println + +c := list(a,b,c) +c deepSum println diff --git a/io/animals.io b/io/animals.io new file mode 100644 index 0000000..b1b1a55 --- /dev/null +++ b/io/animals.io @@ -0,0 +1,19 @@ +Object ancestors := method( + prototype := self proto + if (prototype != Object) then ( + writeln("Slots of ", prototype type, "\n-------------") + prototype slotNames foreach(slotName, slotName println) + writeln + prototype ancestors + ) +) + +Animal := Object clone +Animal speak := method("ambiguous animal noise" println) + +Duck := Animal clone +Duck speak := method("quack" println) +Duck walk := method("waddle" println) + +disco := Duck clone +disco ancestors diff --git a/io/divbyzero.io b/io/divbyzero.io new file mode 100644 index 0000000..34b820e --- /dev/null +++ b/io/divbyzero.io @@ -0,0 +1,14 @@ +"Before:" println +writeln("3/2: ", 3/2) +writeln("3/0: ", 3/0) +writeln("3/-2: ", (3/(-2))) + +Number coreDiv := Number getSlot("/") +Number / = method(n, + return if (n == 0, 0, self coreDiv(n)) +) + +"\nAfter:" println +writeln("3/2: ", 3/2) +writeln("3/0: ", 3/0) +writeln("3/-2: ", (3/(-2))) diff --git a/io/fib.io b/io/fib.io new file mode 100644 index 0000000..46a6d54 --- /dev/null +++ b/io/fib.io @@ -0,0 +1,23 @@ +fib_rec := method(pos, + if (pos == 1 or pos == 2) then ( + return 1 + ) else ( + return fib_rec(pos-1) + fib_rec(pos-2) + ) +) + +fib_loop := method(pos, + fst := 0 + snd := 1 + result := nil + (pos-1) repeat ( + result := fst + snd + fst := snd + snd := result + ) + return result +) + +n := 4 +fib_rec(n) println +fib_loop(n) println diff --git a/io/guess.io b/io/guess.io new file mode 100644 index 0000000..49ceeaa --- /dev/null +++ b/io/guess.io @@ -0,0 +1,26 @@ +stdin := File standardInput +secret := Random value(1, 100) round +tries := 10 +n := nil +newdiff := nil +diff := nil + +"Guess the secret number between 1 and 100 :D" println + +while (n != secret and tries > 0, + write("You have ", tries, " tries left\nNumber? > ") + n = stdin readLine asNumber + + newdiff = (secret - n) abs + if (diff isNil) then ( + diff = newdiff + ) else ( + if (newdiff < diff, "Hotter", "Colder") println + diff = newdiff + ) + + "" println + tries = tries - 1 +) + +if (n == secret, "Correct!", "Epic fail!") println diff --git a/io/matrix.io b/io/matrix.io new file mode 100644 index 0000000..3352c67 --- /dev/null +++ b/io/matrix.io @@ -0,0 +1,74 @@ +Matrix := List clone +Matrix dim := method(x, y, + m := Matrix clone + x repeat ( + l := List clone + l setSize(y) + m append(l) + ) + return m +) + +Matrix set := method(x, y, e, + self at(x) atPut(y, e) +) + +Matrix get := method(x, y, + self at(x) at(y) +) + +Matrix xysize := method( + result := List clone + result append(self size) + result append(self at(0) size) + return result +) + +Matrix transpose := method( + dims := self xysize + m := Matrix dim(dims at(1), dims at(0)) + + for (x, 0, dims at(0) -1, + for (y, 0, dims at(1) -1, + m set(y, x, self get (x, y)) + ) + ) + + return m +) + +Matrix toFile := method(fname, + f := File with(fname) + f remove + f openForUpdating + f write(self serialized) + f close + return self +) + +Matrix fromFile := method(fname, + m := doFile(fname) + return m +) + + + +m1 := Matrix dim(2,3) + +m1 set(0,0,0) +m1 set(0,1,1) +m1 set(0,2,2) +m1 set(1,0,3) +m1 set(1,1,4) +m1 set(1,2,5) + +writeln("m1: ", m1) + +m2 := m1 transpose +writeln("m2: ", m2) + +if (m1 == m2 transpose, "Equals!", "Not equals!") println + +m1 toFile("m1.txt") +m3 := Matrix fromFile("m1.txt") +writeln("m3 (serialized from m1): ", m3) diff --git a/io/myAverage.io b/io/myAverage.io new file mode 100644 index 0000000..ab85a08 --- /dev/null +++ b/io/myAverage.io @@ -0,0 +1,15 @@ +InvalidType := Exception clone + +List myAverage := method( + acc := 0 + self foreach(elm, + if (elm type == "Number") then ( + acc = acc + elm + ) else ( + InvalidType raise(elm type) + ) + ) + return (acc/size(self)) +) + +list(1,2,3) myAverage println diff --git a/io/unless.io b/io/unless.io new file mode 100644 index 0000000..9ccc9af --- /dev/null +++ b/io/unless.io @@ -0,0 +1,5 @@ +unless := method( + (call sender doMessage(call message argAt(0))) ifFalse( + call sender doMessage(call message argAt(1))) ifTrue( + call sender doMessage(call message argAt(2))) +) |