program shannon
integer, parameter :: LLEN=180, MASCII=127
character(len=LLEN) :: chars
integer(1) :: ic(LLEN)
integer :: cc(0:MASCII)
real ::f(0:MASCII)
!equivalence(chars, ic) - does not work with gfortran for some reason
READLINE: do
cc = 0
read(*, '(A)', iostat=ios) chars
if (ios .ne. 0) exit
COUNTCHARS: do i=1,len_trim(chars)
cc(iachar(chars(i:i))) = cc(iachar(chars(i:i))) + 1
end do COUNTCHARS
f = real(cc) / len_trim(chars)
f = -1. * f * log(f)
entropy = sum(f, mask=cc.gt.0)/log(2.)
print *, entropy
end do READLINE
end program shannon
cHJvZ3JhbSBzaGFubm9uCmludGVnZXIsIHBhcmFtZXRlciA6OiBMTEVOPTE4MCwgTUFTQ0lJPTEyNwpjaGFyYWN0ZXIobGVuPUxMRU4pIDo6IGNoYXJzCmludGVnZXIoMSkgOjogaWMoTExFTikKaW50ZWdlciA6OiBjYygwOk1BU0NJSSkKcmVhbCAgICA6OmYoMDpNQVNDSUkpCgohZXF1aXZhbGVuY2UoY2hhcnMsIGljKSAtIGRvZXMgbm90IHdvcmsgd2l0aCBnZm9ydHJhbiBmb3Igc29tZSByZWFzb24KClJFQURMSU5FOiBkbyAKICAgIGNjID0gMAogICAgcmVhZCgqLCAnKEEpJywgaW9zdGF0PWlvcykgY2hhcnMKICAgIGlmIChpb3MgLm5lLiAwKSBleGl0CiAgICAKICAgIAogICAgQ09VTlRDSEFSUzogZG8gaT0xLGxlbl90cmltKGNoYXJzKQogICAgICAgIGNjKGlhY2hhcihjaGFycyhpOmkpKSkgPSBjYyhpYWNoYXIoY2hhcnMoaTppKSkpICsgMQogICAgZW5kIGRvIENPVU5UQ0hBUlMKCiAgICBmID0gcmVhbChjYykgLyBsZW5fdHJpbShjaGFycykKICAgIGYgPSAtMS4gKiAgZiAqIGxvZyhmKQogICAgCiAgICBlbnRyb3B5ID0gc3VtKGYsIG1hc2s9Y2MuZ3QuMCkvbG9nKDIuKQogICAgCiAgICBwcmludCAqLCBlbnRyb3B5CgogZW5kIGRvIFJFQURMSU5FCmVuZCBwcm9ncmFtIHNoYW5ub24=
MTIyMzMzNDQ0NDU1NTU1NjY2NjY2Nzc3Nzc3Nzg4ODg4ODg4CjU2Mzg4MTQ2NzQ0NzUzODg0NjU2NzI4ODc2NzcyODU1Mzc4NgpodHRwczovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnQuY29tL3IvZGFpbHlwcm9ncmFtbWVyCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCg==
122333444455555666666777777788888888
563881467447538846567288767728553786
https://w...content-available-to-author-only...t.com/r/dailyprogrammer
int main(int argc, char *argv[])