summaryrefslogtreecommitdiff
path: root/ioc.lua
blob: 51c99e28235631e91669ca12dbf5682c3a370fd9 (plain)
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