1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
#!/usr/bin/env lua
local eyes = require "eyes"
local reading = require "reading"
local function fmt (float)
return string.format("%.5f", float)
end
local function stats (name, parent)
return {
name=name,
parent=parent,
letters=0,
length=0,
counts={},
add = function (self, value)
local current = self.counts[value] or 0
if current == 0 then
self.letters = self.letters + 1
end
self.length = self.length + 1
self.counts[value] = current + 1
end,
ioc = function (self, letters)
letters = letters or self.letters
local subtotal = 0
for _, count in pairs(self.counts) do
subtotal = subtotal + count * (count - 1)
end
return subtotal / (self.length * (self.length - 1) / letters)
end,
dump = function (self)
local letters = (self.parent or {}).letters
io.write(name, "\t", self.length, "\t", self.letters, "\t", fmt(self:ioc(letters)))
if letters then
io.write("\t", fmt(self:ioc()))
end
print()
end
}
end
local global = stats"global"
local lokals = {}
for index, message in ipairs(eyes) do
local lokal = stats("#"..index, global)
for _, value in reading.values(message) do
global:add(value)
lokal:add(value)
end
table.insert(lokals, lokal) -- Global is incomplete, can't dump yet.
end
global:dump()
for _, lokal in ipairs(lokals) do
lokal:dump()
end
|