; entropy
(define (log2 x) (/ (log x) (log 2)))
(define (entropy filename)
(with-input-from-file filename (lambda ()
(let ((freqs (make-vector 256 0)) (ent 0.0))
(let loop ((c (read-char)) (len 0))
(if (not (eof-object? c))
(let ((i (char->integer c)))
(vector-set! freqs i
(+ (vector-ref freqs i) 1))
(loop (read-char) (+ len 1)))
(do ((k 0 (+ k 1)))
((= k 256) (- ent))
(let ((freq (vector-ref freqs k)))
(when (positive? freq)
(let ((x (/ freq len)))
(set! ent (+ ent (* x (log2 x))))))))))))))
(display (entropy "entropy.ss")) (newline)
OyBlbnRyb3B5CgooZGVmaW5lIChsb2cyIHgpICgvIChsb2cgeCkgKGxvZyAyKSkpCgooZGVmaW5lIChlbnRyb3B5IGZpbGVuYW1lKQogICh3aXRoLWlucHV0LWZyb20tZmlsZSBmaWxlbmFtZSAobGFtYmRhICgpCiAgICAobGV0ICgoZnJlcXMgKG1ha2UtdmVjdG9yIDI1NiAwKSkgKGVudCAwLjApKQogICAgICAobGV0IGxvb3AgKChjIChyZWFkLWNoYXIpKSAobGVuIDApKQogICAgICAgIChpZiAobm90IChlb2Ytb2JqZWN0PyBjKSkKICAgICAgICAgICAgKGxldCAoKGkgKGNoYXItJmd0O2ludGVnZXIgYykpKQogICAgICAgICAgICAgICh2ZWN0b3Itc2V0ISBmcmVxcyBpCiAgICAgICAgICAgICAgICAoKyAodmVjdG9yLXJlZiBmcmVxcyBpKSAxKSkKICAgICAgICAgICAgICAobG9vcCAocmVhZC1jaGFyKSAoKyBsZW4gMSkpKQogICAgICAgICAgICAoZG8gKChrIDAgKCsgayAxKSkpCiAgICAgICAgICAgICAgICAoKD0gayAyNTYpICgtIGVudCkpCiAgICAgICAgICAgICAgKGxldCAoKGZyZXEgKHZlY3Rvci1yZWYgZnJlcXMgaykpKQogICAgICAgICAgICAgICAgKHdoZW4gKHBvc2l0aXZlPyBmcmVxKQogICAgICAgICAgICAgICAgICAobGV0ICgoeCAoLyBmcmVxIGxlbikpKQogICAgICAgICAgICAgICAgICAgIChzZXQhIGVudCAoKyBlbnQgKCogeCAobG9nMiB4KSkpKSkpKSkpKSkpKSkKCihkaXNwbGF5IChlbnRyb3B5ICJlbnRyb3B5LnNzIikpIChuZXdsaW5lKQ==