diff --git a/exercise_0302/go.mod b/exercise_0302/go.mod new file mode 100644 index 0000000000000000000000000000000000000000..4444524d0c3af71614484eaa65edf54e657a6f4d --- /dev/null +++ b/exercise_0302/go.mod @@ -0,0 +1,3 @@ +module gitlab.reutlingen-university.de/go-exercises/go-starter/exercise_0302 + +go 1.20 diff --git a/exercise_0302/main.go b/exercise_0302/main.go new file mode 100644 index 0000000000000000000000000000000000000000..58762e066a8afef728510fcf89dcd7dba9c247ea --- /dev/null +++ b/exercise_0302/main.go @@ -0,0 +1,35 @@ +package main + +import "fmt" + +type calcFunc func(a, b int) int + +func compute(calc calcFunc, init int, a ...int) (result int) { + result = init + for _, n := range a { + result = calc(result, n) + } + return +} + +func selectCalcFunc(calcOp rune) calcFunc { + return func(a, b int) int { + switch calcOp { + case '+': + return a + b + case '*': + return a * b + case '-': + return a - b + default: + panic("Illegal operation") + } + } +} + +func main() { + fmt.Println(compute(selectCalcFunc('+'), 0, 1, 2, 3)) + fmt.Println(compute(selectCalcFunc('-'), 0, 1, 2, 3)) + fmt.Println(compute(selectCalcFunc('*'), 1, 1, 2, 3)) + fmt.Println(compute(selectCalcFunc('?'), 1, 1, 2, 3)) +}