From 122b885acd5c86bfcbae152caea50c6695c4acbd Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 11 Oct 2015 17:48:34 +0200 Subject: Add entropy calculator --- flood.go | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'flood.go') diff --git a/flood.go b/flood.go index bb7bd9e..d5bed85 100644 --- a/flood.go +++ b/flood.go @@ -2,21 +2,32 @@ package main import ( "log" + "math" "sort" "strings" irc "github.com/fluffle/goirc/client" ) +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 +} + func Flood(s string) bool { - if s == "" { + if len(s) < 4 { return false } - v := strings.Fields(s) - if len(v) >= 6 { + if v := strings.Fields(s); len(v) >= 6 { return CommonWord(v) >= 2*len(v)/3 || MedianLength(v) == 1 } - return false + return Entropy(s) <= 1 } func CommonWord(v []string) int { -- cgit v1.2.3