--/--/--

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2008/10/20

Project Euler: Problem 17

Problem 17

どうにもこういった感じの処理を記述するのが苦手だ。実装も大変ダサい。つづりに間違いがなければあってるはず。

実行結果

$ runhaskell 17.hs
18548

プログラム

 1 toAlphabet 0 = ""
 2 toAlphabet 1 = "one"
 3 toAlphabet 2 = "two"
 4 toAlphabet 3 = "three"
 5 toAlphabet 4 = "four"
 6 toAlphabet 5 = "five"
 7 toAlphabet 6 = "six"
 8 toAlphabet 7 = "seven"
 9 toAlphabet 8 = "eight"
10 toAlphabet 9 = "nine"
11 toAlphabet 10 = "ten"
12 toAlphabet 11 = "eleven"
13 toAlphabet 12 = "twelve"
14 toAlphabet 13 = "thirteen"
15 toAlphabet 14 = "fourteen"
16 toAlphabet 15 = "fifteen"
17 toAlphabet 16 = "sixteen"
18 toAlphabet 17 = "seventeen"
19 toAlphabet 18 = "eighteen"
20 toAlphabet 19 = "nineteen"
21 toAlphabet 20 = "twenty"
22 toAlphabet 30 = "thirty"
23 toAlphabet 40 = "fourty"
24 toAlphabet 50 = "fifty"
25 toAlphabet 60 = "sixty"
26 toAlphabet 70 = "seventy"
27 toAlphabet 80 = "eighty"
28 toAlphabet 90 = "ninety"
29 toAlphabet 100 = "hundred"
30 toAlphabet 1000 = "one thousand"
31 toAlphabet n | n > 100 = (toAlphabet $ n `div` 100++ " hundred " ++
32                          (toAlphabet $ n `mod` 100)
33              | otherwise = (toAlphabet $ n - n `mod` 10++ " " ++
34                            (toAlphabet $ n `mod` 10)
35
36 deleteAll :: (Eq a) => a -> [a] -> [a]
37 deleteAll n [] = []
38 deleteAll n (x:xs) | n == x = deleteAll n xs
39                    | otherwise = x : deleteAll n xs
40
41 fn = sum $ map (length . deleteAll ' ' . toAlphabet) [1..1000]
42
43 main = print $ fn
スポンサーサイト

comment

post




上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。