summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-10-11 17:48:34 +0200
committerDimitri Sokolyuk <demon@dim13.org>2015-10-11 17:48:34 +0200
commit122b885acd5c86bfcbae152caea50c6695c4acbd (patch)
tree283108706f49eed8da11d02d0daa845fde56119c
parentaaa32495099d62df27f1f955bd594b3ee82087db (diff)
Add entropy calculator
-rw-r--r--flood.go19
-rw-r--r--flood_test.go8
2 files changed, 23 insertions, 4 deletions
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 {
diff --git a/flood_test.go b/flood_test.go
index 699e333..3e16db4 100644
--- a/flood_test.go
+++ b/flood_test.go
@@ -32,6 +32,14 @@ var floodTestData = []floodTest{
Input: `a = b > 3 ? 2 : 4`,
Result: true,
},
+ {
+ Input: `AAAAAAAAAAAAAAAAAAAA`,
+ Result: true,
+ },
+ {
+ Input: `AAAAAAAAAABBBBBBBBBB`,
+ Result: true,
+ },
}
func TestFlood(t *testing.T) {