[Haskell] cantidad de entropía en un archivo

Estos días un usuario ha estado posteando código haskell en HackXCrack, lo que renovó el poco interés que tenía en dicho lenguaje ( muy recomendable Learn_You_a_Haskell_for_Greater_Good! para empezar, btw ), así que aquí está un ejemplo, muestra la cantidad de entropía en un archivo, de 0 a 8 [ entropy.hs ] . El plugin para mostrar código no tira de haskell, así que está coloreado con pyments dentro del post... ===============================================================================

!/usr/bin/runhaskell

-- Written by kenkeiras under the WTFPLv2

-- Para getArgs() import System.Environment

-- Para ord() import Data.Char

-- Cuenta las ocurrencias de cada tipo de caracteres countChars s = [ sum[ if ord(c) == code then 1 else 0|c<-s] | code <- [0 .. 255]]

-- Calcula la entropía a través del número de ocurrencias y el número total entropy arr l = sum[ if n /= 0 then (n / l) * logBase 2 (l / n) else 0 | n <- arr ]

showEntropy fname = do     f <- readFile fname -- Lee el contenido del archivo

let l = length f    -- determina el tamaño del archivo     let lf = fromIntegral l  -- convierte la longitud a Float ( necesario para el logaritmo )

let h = fname ++ "[" ++ show(l) ++ " bytes]: "     putStr h

let count = countChars f -- Prepara el mapa de caracteres     let e = entropy count lf -- Calcula la entropía     let h = show(e)

putStrLn h

-- Comprueba los argumentos main = do     args <- getArgs     let l = length args     if l /= 1       then error "./entropy.hs "       else showEntropy (args!!0) ===============================================================================

untagged

Sets de Julia y Mandelbrot con Python » « Traducción automática de programas