package main import ( "math" "sort" "strings" "unicode/utf8" ) const ( runes = 6 words = 6 ) func entropy(s string) (e float64) { n := make(map[rune]float64) for _, r := range s { n[r] += 1 / float64(len(s)) } for _, v := range n { e -= v * math.Log2(v) } return e } func isFlood(s string) bool { if utf8.RuneCountInString(s) <= runes { return false } if v := strings.Fields(s); len(v) >= words { return commonWord(v) >= len(v)/2 } return entropy(s) <= 1 } func commonWord(v []string) int { m := make(map[string]int) for _, w := range v { m[w]++ } l := make([]int, len(m)) for _, n := range m { l = append(l, n) } sort.Sort(sort.Reverse(sort.IntSlice(l))) return l[0] }