RosettaCodeData/Task/Entropy/Phix/entropy.phix

29 lines
591 B
Plaintext

function log2(atom v)
return log(v)/log(2)
end function
function entropy(sequence s)
sequence symbols = {},
counts = {}
integer N = length(s)
for i=1 to N do
object si = s[i]
integer k = find(si,symbols)
if k=0 then
symbols = append(symbols,si)
counts = append(counts,1)
else
counts[k] += 1
end if
end for
atom H = 0
integer n = length(counts)
for i=1 to n do
atom ci = counts[i]/N
H -= ci*log2(ci)
end for
return H
end function
?entropy("1223334444")