diff --git a/exercise_0207/go.mod b/exercise_0207/go.mod new file mode 100644 index 0000000000000000000000000000000000000000..171404b14ba28477be124b8e129465bee106d1e3 --- /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 0000000000000000000000000000000000000000..ac4168a4e139bdd3df3535175befe5799a009bb7 --- /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]) + } +}