diff --git a/challenge-6/submissions/Raycas96/solution-template.go b/challenge-6/submissions/Raycas96/solution-template.go new file mode 100644 index 000000000..af8555b7c --- /dev/null +++ b/challenge-6/submissions/Raycas96/solution-template.go @@ -0,0 +1,34 @@ +// Package challenge6 contains the solution for Challenge 6. +package challenge6 + +import ( + "strings" + "unicode" +) + +// CountWordFrequency takes a string containing multiple words and returns +// a map where each key is a word and the value is the number of times that +// word appears in the string. The comparison is case-insensitive. +// +// Words are defined as sequences of letters and digits. +// All words are converted to lowercase before counting. +// All punctuation, spaces, and other non-alphanumeric characters are ignored. +// +// For example: +// Input: "The quick brown fox jumps over the lazy dog." +// Output: map[string]int{"the": 2, "quick": 1, "brown": 1, "fox": 1, "jumps": 1, "over": 1, "lazy": 1, "dog": 1} +func CountWordFrequency(text string) map[string]int { + counts := make(map[string]int) + + text = strings.ToLower(text) + text = strings.ReplaceAll(text, "'", "") + words := strings.FieldsFunc(text, func(r rune) bool { + return !unicode.IsLetter(r) && !unicode.IsDigit(r) + }) + + for _, word := range words { + counts[word]++ + } + + return counts +} \ No newline at end of file