diff --git a/Lab04/code/part01/main.go b/Lab04/code/part01/main.go index 2ca793b..2cdb577 100644 --- a/Lab04/code/part01/main.go +++ b/Lab04/code/part01/main.go @@ -3,31 +3,84 @@ package main import ( "fmt" "github.com/dariubs/percent" + "io/ioutil" + "sort" "strings" ) +type letter struct { + upperCase string + lowerCase string + count int + frequency float64 +} + +type letterList []letter + +func (l letterList) Len() int { + return len(l) +} + +func (l letterList) Less(i, j int) bool { + return l[i].frequency > l[j].frequency +} + +func (l letterList) Swap(i, j int) { + l[i], l[j] = l[j], l[i] +} + var alphabet = []rune{ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', } +var letters = make([]letter, len(alphabet)) -func letterCount(inputText string) { - count := make([]int, len(alphabet)) - frequency := make([]float64, len(alphabet)) - totalCount := 0 - for index, letter := range alphabet { - count[index] = strings.Count(inputText, string(letter)) - count[index] += strings.Count(inputText, string(letter+32)) - totalCount += count[index] - } +func initLetterStruct() { for index := range alphabet { - frequency[index] = percent.PercentOf(count[index], totalCount) + letters[index].upperCase = string(alphabet[index]) + letters[index].lowerCase = string(alphabet[index] + 32) } - for index, letter := range alphabet { - fmt.Printf("The letter %c (%c) occurs %d times in the text and the frequency in percent is %0.2f\n", letter, letter+32, count[index], frequency[index]) +} + +func readFile(relativePath string) string { + content, err := ioutil.ReadFile(relativePath) + if err != nil { + fmt.Println(err) + } + return string(content) +} + +func countLetters(inputText string) int { + totalCount := 0 + for index := range alphabet { + letters[index].count += + strings.Count(inputText, letters[index].lowerCase) + + strings.Count(inputText, letters[index].upperCase) + totalCount += letters[index].count + } + return totalCount +} + +func calculateFrequency(totalCount int) { + for index := range alphabet { + letters[index].frequency = percent.PercentOf(letters[index].count, totalCount) + } +} + +func printResult() { + for index := range alphabet { + l := letters[index] + fmt.Printf( + "The letter %s (%s) occurs %d times in the text and the frequencyArray in percent is %0.2f\n", + l.upperCase, l.lowerCase, l.count, l.frequency, + ) } } func main() { - letterCount("This is a test to check for something.Zz") + initLetterStruct() + totalCount := countLetters(readFile("plaintext.txt")) + calculateFrequency(totalCount) + sort.Sort(letterList(letters)) + printResult() } diff --git a/Lab04/content/plaintext.txt b/Lab04/code/part01/plaintext.txt similarity index 100% rename from Lab04/content/plaintext.txt rename to Lab04/code/part01/plaintext.txt