30 lines
920 B
Text
30 lines
920 B
Text
program fibonacci_words;
|
|
print("N Length Entropy");
|
|
print("---- ---------- -------------------");
|
|
loop for n in [1..37] do
|
|
[zeroes, ones] := fibword := fib_word n;
|
|
length := zeroes + ones;
|
|
print(lpad(str n,4) + " " + lpad(str length,10) + " " + str entropy fibword);
|
|
end loop;
|
|
|
|
$ Return the amount of zeroes and ones in the N'th fibonacci word
|
|
op fib_word(n);
|
|
[a0, a1, b0, b1] := [0, 1, 1, 0];
|
|
loop for i in [2..n] do
|
|
[a0, a1, b0, b1] := [b0, b1, a0+b0, a1+b1];
|
|
end loop;
|
|
return [a0, a1];
|
|
end op;
|
|
|
|
op entropy(fibword);
|
|
[zeroes, ones] := fibword;
|
|
fzeroes := zeroes / (zeroes + ones);
|
|
fones := ones / (zeroes + ones);
|
|
|
|
if fzeroes = 0 or fones = 0 then
|
|
return 0;
|
|
end if;
|
|
|
|
return -fzeroes*log fzeroes/log 2 - fones*log fones/log 2;
|
|
end op;
|
|
end program;
|