Update all new Tasks
This commit is contained in:
parent
00a190b0a6
commit
91df62d461
5697 changed files with 93386 additions and 804 deletions
25
Task/Fibonacci-word/Haskell/fibonacci-word.hs
Normal file
25
Task/Fibonacci-word/Haskell/fibonacci-word.hs
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
module Main where
|
||||
|
||||
import Control.Monad
|
||||
import Data.List
|
||||
import Data.Monoid
|
||||
import Text.Printf
|
||||
|
||||
entropy :: (Ord a) => [a] -> Double
|
||||
entropy = sum
|
||||
. map (\c -> (c *) . logBase 2 $ 1.0 / c)
|
||||
. (\cs -> let { sc = sum cs } in map (/ sc) cs)
|
||||
. map (fromIntegral . length)
|
||||
. group
|
||||
. sort
|
||||
|
||||
fibonacci :: (Monoid m) => m -> m -> [m]
|
||||
fibonacci a b = unfoldr (\(a,b) -> Just (a, (b, a <> b))) (a,b)
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
printf "%2s %10s %17s %s\n" "N" "length" "entropy" "word"
|
||||
zipWithM_ (\i v -> let { l = length v } in printf "%2d %10d %.15f %s\n"
|
||||
i l (entropy v) (if l > 40 then "..." else v))
|
||||
[1..38::Int]
|
||||
(take 37 $ fibonacci "1" "0")
|
||||
Loading…
Add table
Add a link
Reference in a new issue