From e9ef34f4e5bbf2cccd339370e87b79cd8db4e16b Mon Sep 17 00:00:00 2001
From: Martin Schmollinger <martin.schmollinger@reutlingen-university.de>
Date: Fri, 7 Apr 2023 18:30:48 +0200
Subject: [PATCH] Solution to exercise of unit 03-02

---
 exercise_0302/go.mod  |  3 +++
 exercise_0302/main.go | 35 +++++++++++++++++++++++++++++++++++
 2 files changed, 38 insertions(+)
 create mode 100644 exercise_0302/go.mod
 create mode 100644 exercise_0302/main.go

diff --git a/exercise_0302/go.mod b/exercise_0302/go.mod
new file mode 100644
index 0000000..4444524
--- /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 0000000..58762e0
--- /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))
+}
-- 
GitLab