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

---
 exercise_0207/go.mod  |  3 +++
 exercise_0207/main.go | 39 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 42 insertions(+)
 create mode 100644 exercise_0207/go.mod
 create mode 100644 exercise_0207/main.go

diff --git a/exercise_0207/go.mod b/exercise_0207/go.mod
new file mode 100644
index 0000000..171404b
--- /dev/null
+++ b/exercise_0207/go.mod
@@ -0,0 +1,3 @@
+module gitlab.reutlingen-university.de/go-exercises/go-starter/exercise_0207
+
+go 1.20
diff --git a/exercise_0207/main.go b/exercise_0207/main.go
new file mode 100644
index 0000000..ac4168a
--- /dev/null
+++ b/exercise_0207/main.go
@@ -0,0 +1,39 @@
+package main
+
+import (
+	"fmt"
+	"os"
+	"unicode/utf8"
+)
+
+func printSlice(s []string) {
+	fmt.Printf("%p –len: %d cap: %d %#v\n", s, len(s), cap(s), s)
+}
+
+func oneOrMore(words []string) bool {
+	return len(words) > 1
+}
+
+func getNumberOfBytesAndRunes(words []string) (numberOfBytes int, numberOfRunes int) {
+	for _, word := range os.Args[1:] {
+		numberOfBytes += len(word)
+		numberOfRunes += utf8.RuneCountInString(word)
+	}
+	return
+}
+
+func getAverageNumberOfBytesPerRune(numberOfBytes int, numberOfRunes int) float32 {
+	return float32(numberOfBytes) / float32(numberOfRunes)
+}
+
+func main() {
+	if oneOrMore(os.Args) {
+		printSlice(os.Args)
+		numberOfBytes, numberOfRunes := getNumberOfBytesAndRunes(os.Args)
+		fmt.Printf("Number of bytes: %d\n", numberOfBytes)
+		fmt.Printf("Number of runes: %d\n", numberOfRunes)
+		fmt.Printf("Average number of bytes per rune: %f\n", getAverageNumberOfBytesPerRune(numberOfBytes, numberOfRunes))
+	} else {
+		fmt.Printf("Usage: %s <sentence>\n", os.Args[0])
+	}
+}
-- 
GitLab