RosettaCodeData/Task/Fibonacci-word/SETL/fibonacci-word.setl
2023-12-16 21:33:55 -08:00

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;