2004年04月06日
2004年04月06日
最近
かもさん學園@音泉
箱根数理系合宿、天城高原、東京観光オリ合宿
シンフォニックレイン初回限定版complated. 鬱げー
理科一類韓国語クラス42名中女子0
A元にもらったMBでCel2.4、Mem512に。Cel850はDebianへ。Javaはや。440BXとはついにお別れ。
はすける
中原麻衣強化期間中
str1 = "Haskell is a computer programming language. In particular, it is a polymorphicly typed, l
azy, purely functional language, quite different from most other programming languages."
str2 = "Peter Piper picked a peck of pickled pepper; A peck of pickled pepper Peter Piper picked;
If Peter Piper picked a peck of pickled pepper, Where's the peck of pickled pepper Peter Piper pic
ked?"
str3 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.,'; "
num = length str3
count :: [(Char,Int)] -> Char -> [(Char,Int)]
count m l = if tcheck (map (\v -> (fst v)==l) m)
then map (\v -> if (fst v)==l then ((fst v),(snd v)+1) else v) m
else [(l,1)]++m
countstr "" = []
countstr (x:xs) = count (countstr xs) x
tcheck :: [Bool]->Bool
tcheck [] = False
tcheck (x:xs) = x || (tcheck xs)
disp :: [(Char,Int)] -> IO ()
disp [] = return ()
disp (x:xs) = do disp1 x
disp xs
disp1 :: (Char,Int) -> IO ()
disp1 (x,i) = do putStr ([x]++" "++(show i)++"\n")
log2 :: Float -> Float
log2 i = (log i)/(log 2.0)
calcinfobit_ :: [(Char,Int)] -> Float
calcinfobit_ m = addlist (map (\v -> fromInt(snd v)*log2(fromInt(num)/fromInt(snd v)) ) m)
calcinfobit = calcinfobit_ . countstr
calcinfobit2 :: String -> Float
calcinfobit2 m = fromInt(length m)*log2(fromInt(num))
addlist [] = 0.0
addlist (x:xs) = x + addlist xs
pr s = "len:"++(show (length s))++" "++(show (calcinfobit s))++" "++(show (calcinfobit2 s))
main :: IO ()
main = disp (countstr str2)
main1 = putStr (pr str1)
main2 = putStr (pr str2)
main3 = putStr (pr str3)
Main> main1 len:178 467.182 1038.25 Main> main2 len:192 368.935 1119.91 Main> main3 len:57 332.475 332.475 Main> main A 1 ; 2 I 1 a 2 , 1 W 1 ' 1 s 1 h 2 o 4 f 5 l 4 t 5 P 8 r 13 33 p 28 i 12 c 12 k 12 e 35 d 8 ? 1
あってるかなぁ…でも汚い。注意して書かないとcopyが発生してすごい時間かかったりする。 明示的な型変換が必要なのはしかたないんかなぁ