local fmt = require "fmt" local function entropy(s) local m = {} for i = 1, #s do local c = s[i] local d = m[c] m[c] = (d) ? d + 1 : 1 end local hm = 0 for m:keys() as k do local c = m[k] hm += c * math.log(c, 2) end local l = #s return math.log(l, 2) - hm / l end local function fibword(n) if n < 2 then return tostring(n) end local a = "1" local b = "0" local i = 3 while i <= n do local c = b .. a a, b = b, c i += 1 end return b end fmt.print("%2s %10s %10s %s", "n", "Length", " Entropy ", "Fib word") for i = 1, 37 do local fw = fibword(i) fmt.print("%2d %10s %0.8f %s", i, fmt.int(#fw), entropy(fw), fmt.abridge(fw, 20)) end