sorted result
This commit is contained in:
parent
925129f76e
commit
f80e2da7e4
2 changed files with 66 additions and 13 deletions
|
@ -3,31 +3,84 @@ package main
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/dariubs/percent"
|
"github.com/dariubs/percent"
|
||||||
|
"io/ioutil"
|
||||||
|
"sort"
|
||||||
"strings"
|
"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{
|
var alphabet = []rune{
|
||||||
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
|
'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',
|
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
|
||||||
}
|
}
|
||||||
|
var letters = make([]letter, len(alphabet))
|
||||||
|
|
||||||
func letterCount(inputText string) {
|
func initLetterStruct() {
|
||||||
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]
|
|
||||||
}
|
|
||||||
for index := range alphabet {
|
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() {
|
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()
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue