seven_languages_in_seven_weeks/io/day2.io
2023-04-10 17:11:27 +02:00

142 lines
2.8 KiB
Io

# Task 1:
fib := method(i,
if(i==0) then(return 0)
if(i==1) then(return 1)
return fib(i - 2) + fib(i - 1)
)
fib_loop := method(i,
r := 0
s := 0
t := 1
for(j, 2, i, 1, r := s; s := t; t := r + s)
return t
)
fib(1) println
fib(2) println
fib(3) println
fib(4) println
fib(5) println
fib(6) println
fib(7) println
fib(8) println
"=====================================" println
fib_loop(1) println
fib_loop(2) println
fib_loop(3) println
fib_loop(4) println
fib_loop(5) println
fib_loop(6) println
fib_loop(7) println
fib_loop(8) println
# Task 2:
Number old_div := Number getSlot("/")
Number / = method(divisor,
if(divisor == 0, 0, self old_div(divisor))
)
"Testing Task 2:" println
(6 / 0) println
(6 / 3) println
# Task 3:
"Task 3:" println
arr := list(list(1, 2, 3), list(4, 5, 6), list(7, 8, 9))
arr_sum := 0
for(i, 0, arr size - 1, 1, i println; arr_sum = arr_sum + arr at(i) sum)
arr_sum println
# Task 4:
"Task 4:" println
List myAverage := method(
self sum / self size
)
list(1, 2, 3, 4) myAverage println
# list() myAverage println
# Task 5, 6, 7:
"Task 5, 6, 7:" println
Matrix := Object clone
Matrix dim := method(x, y,
self content := list()
self y := y
self x := x
for(i, 1, y, 1,
self content push(list())
for(j, 1, x, 1,
self content at(i - 1) push(0)
)
)
)
Matrix set := method(x, y, value,
self content at(y) atPut(x, value)
)
Matrix get := method(x, y,
self content at(y) at(x)
)
Matrix writeToFile := method(filename,
file := File clone openForUpdating(filename)
for(i, 1, y, 1,
for(j, 1, x, 1,
file write(self content at(i - 1) at(j -1) asSimpleString, " ")
)
file write("\n")
)
)
Matrix readFromFile := method(filename,
file := File clone openForReading(filename)
lines := file readLines
x := lines first split size
y := lines size
self dim(x, y)
lines foreach(i, line, line split foreach(j, v, self content at(i) atPut(j, v)))
)
matrixOne := Matrix clone
matrixOne dim(2, 3)
matrixOne content println
matrixOne set(1,1, 20)
matrixOne get(1,1) println
matrixOne writeToFile("matrix.txt")
matrixTwo := Matrix clone
matrixTwo readFromFile("matrix.txt")
matrixTwo content println
# Task 8:
"Task 8:" println
lastGuess := 0
numberOfGuesses := 0
targetNumber := (Date asNumber * 70) round % 100
while(numberOfGuesses < 10,
input := File standardInput() readLine() asNumber()
if(input == targetNumber, "fertig!" println; break,
if(numberOfGuesses == 0, "nicht die richtige!" println,
if((targetNumber - input) abs < (targetNumber - lastGuess) abs, "hotter" println, "colder" println )
)
)
lastGuess = input
numberOfGuesses = numberOfGuesses + 1
)