Home Diary 倉庫

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が発生してすごい時間かかったりする。 明示的な型変換が必要なのはしかたないんかなぁ