#!/usr/bin/ruby

#
## https://rosettacode.org/wiki/Fibonacci_word#Sidef
#

func entropy(s) {
    [0] + (s.chars.freq.values »/» s.len) -> reduce { |a,b|
        a - b*b.log2
    }
}
 
var n_max = 20
var words = ['1', '0']
 
{
    words.append(words[-1] + words[-2])
} * (n_max - words.len)
 
say ('%3s %10s %15s  %s' % <N Length Entropy Fibword>...)
 
for i in ^words {
    var word = words[i]
    say ('%3i %10i %15.12f  %s' % (i+1,
                                   word.len,
                                   entropy(word),
                                   word.len<30 ? word : '<too long>'))
}
