Skip to content

Commit

Permalink
hw03_frequency_analysis
Browse files Browse the repository at this point in the history
  • Loading branch information
timersha committed Jan 1, 2025
1 parent 5e1ffa6 commit 151e8c3
Show file tree
Hide file tree
Showing 3 changed files with 171 additions and 4 deletions.
Empty file removed hw03_frequency_analysis/.sync
Empty file.
2 changes: 1 addition & 1 deletion hw03_frequency_analysis/go.mod
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module github.com/fixme_my_friend/hw03_frequency_analysis
module github.com/timersha/golang-tests/hw03_frequency_analysis

go 1.22

Expand Down
173 changes: 170 additions & 3 deletions hw03_frequency_analysis/top.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,173 @@
// package main

package hw03frequencyanalysis

func Top10(_ string) []string {
// Place your code here.
return nil
import (
"sort"
"strings"
)

type NodeValue struct {
Word string
Count int
}

type Node struct {
Left *Node
Value NodeValue
Right *Node
}

func Insert(node *Node, value NodeValue) {
if value.Count > node.Value.Count {
if node.Right == nil {
node.Right = &Node{nil, value, nil}
} else {
Insert(node.Right, value)
}
}
if value.Count <= node.Value.Count {
if node.Left == nil {
node.Left = &Node{nil, value, nil}
} else {
Insert(node.Left, value)
}
}
}

func MakeSortedArray(node *Node, nums *[]NodeValue) {
if len(*nums) > 10 {
return
}

if node.Right == nil {
*nums = append(*nums, node.Value)
} else {
MakeSortedArray(node.Right, nums)
*nums = append(*nums, node.Value)
}

if node.Left == nil {
lIndex := len(*nums)
if lIndex > 0 && node.Value.Word != ((*nums)[lIndex-1]).Word {
*nums = append(*nums, node.Value)
}
} else {
MakeSortedArray(node.Left, nums)
}
}

func SortSubslices(values *[]NodeValue) []string {
result := &[]string{}
sl := &[]string{}
var previous *NodeValue
for i := range *values {
nodeValue := (*values)[i]

if previous == nil {
previous = &nodeValue
*sl = append(*sl, nodeValue.Word)
continue
}

if previous.Count == nodeValue.Count {
*sl = append(*sl, nodeValue.Word)
previous = &nodeValue
} else {
sort.Strings(*sl)
*result = append(*result, *sl...)
previous = nil
sl = &[]string{}
*sl = append(*sl, nodeValue.Word)
}
}
sort.Strings(*sl)
*result = append(*result, *sl...)

if len(*result)-1 > 11 {
return (*result)[0:10]
}
return *result
}

func CleanAll(str string) string {
str = strings.ReplaceAll(str, "\n", " ")
str = strings.ReplaceAll(str, "\t", " ")
// str = strings.TrimRight(str, "\r\n")
// str = strings.TrimSuffix(str, "\r\n")
return str
}

func Top10(str string) []string {

Check failure on line 101 in hw03_frequency_analysis/top.go

View workflow job for this annotation

GitHub Actions / lint

unnecessary leading newline (whitespace)

Check failure on line 102 in hw03_frequency_analysis/top.go

View workflow job for this annotation

GitHub Actions / lint

File is not `gofumpt`-ed (gofumpt)
if len(str) == 0 {
return []string{}
}
str = CleanAll(str)
wordsFrequency := make(map[string]int)
for _, word := range strings.Split(str, " ") {
if len(word) > 0 {
wordsFrequency[word] += 1

Check warning on line 110 in hw03_frequency_analysis/top.go

View workflow job for this annotation

GitHub Actions / lint

increment-decrement: should replace wordsFrequency[word] += 1 with wordsFrequency[word]++ (revive)
}
}
var root *Node
for k, v := range wordsFrequency {
value := NodeValue{k, v}
if root == nil {
root = &Node{nil, value, nil}
continue
}
Insert(root, value)
}
maxNums := &[]NodeValue{}
MakeSortedArray(root, maxNums)
result := SortSubslices(maxNums)
return result
}

// func main() {
// str := text_2
// //// fmt.Println("input:", str)
// result := Top10(str)
// //// fmt.Println("result:", result)
// for k := range result {
// fmt.Println("r => :", result[k])
// }
// }

var text_1 = "cat and dog, one dog,two cats and one man"

Check warning on line 138 in hw03_frequency_analysis/top.go

View workflow job for this annotation

GitHub Actions / lint

var-naming: don't use underscores in Go names; var text_1 should be text1 (revive)

// "он", "а", "и", "ты", "что", "-", "Кристофер", "если", "не", "то",

Check failure on line 140 in hw03_frequency_analysis/top.go

View workflow job for this annotation

GitHub Actions / lint

Comment should end in a period (godot)
var text_2 = `Как видите, он спускается по лестнице вслед за своим

Check warning on line 141 in hw03_frequency_analysis/top.go

View workflow job for this annotation

GitHub Actions / lint

var-naming: don't use underscores in Go names; var text_2 should be text2 (revive)
другом Кристофером Робином, головой вниз, пересчитывая
ступеньки собственным затылком: бум-бум-бум. Другого способа
сходить с лестницы он пока не знает. Иногда ему, правда,
кажется, что можно бы найти какой-то другой способ, если бы он
только мог на минутку перестать бумкать и как следует
сосредоточиться. Но увы - сосредоточиться-то ему и некогда.
Как бы то ни было, вот он уже спустился и готов с вами
познакомиться.
- Винни-Пух. Очень приятно!
Вас, вероятно, удивляет, почему его так странно зовут, а
если вы знаете английский, то вы удивитесь еще больше.
Это необыкновенное имя подарил ему Кристофер Робин. Надо
вам сказать, что когда-то Кристофер Робин был знаком с одним
лебедем на пруду, которого он звал Пухом. Для лебедя это было
очень подходящее имя, потому что если ты зовешь лебедя
громко: "Пу-ух! Пу-ух!"- а он не откликается, то ты всегда
можешь сделать вид, что ты просто понарошку стрелял; а если ты
звал его тихо, то все подумают, что ты просто подул себе на
нос. Лебедь потом куда-то делся, а имя осталось, и Кристофер
Робин решил отдать его своему медвежонку, чтобы оно не пропало
зря.
А Винни - так звали самую лучшую, самую добрую медведицу
в зоологическом саду, которую очень-очень любил Кристофер
Робин. А она очень-очень любила его. Ее ли назвали Винни в
честь Пуха, или Пуха назвали в ее честь - теперь уже никто не
знает, даже папа Кристофера Робина. Когда-то он знал, а теперь
забыл.
Словом, теперь мишку зовут Винни-Пух, и вы знаете почему.
Иногда Винни-Пух любит вечерком во что-нибудь поиграть, а
иногда, особенно когда папа дома, он больше любит тихонько
посидеть у огня и послушать какую-нибудь интересную сказку.
В этот вечер...`

0 comments on commit 151e8c3

Please sign in to comment.