Haskellで世界のナベアツ問題
※以前C#で書いたネタはこちら→FizzBuzz問題と世界のナベアツ
※後にPowerShellで書いたネタはこちら→PowerShellで世界のナベアツ問題
コンバット越前よろしく、
せっかくだから俺はHaskellで世界のナベアツ問題を書くゼ(ネタがないという意味で)
{- Haskellで世界のナベアツ -} main : IO () main = return (nabeatsuOfWorld [1..40]) >>= print {- 3の倍数と3の付く数字だけアホになり、8の倍数だけ気持ち良くなります -} nabeatsuOfWorld : [Int] -> [String] nabeatsuOfWorld [] = [] nabeatsuOfWorld (x:s) | x `mod` 3 == 0 = (show x ++ "Aho") :nabeatsuOfWorld(xs) -- 3の倍数でアホになる | find (show x) '3' = (show x ++ "Aho") :nabeatsuOfWorld(xs) -- 3の付く数字でアホになる | x `mod` 8 == 0 = (show x ++ "Ahan") :nabeatsuOfWorld(xs) -- 8の倍数で気持ち良くなる | otherwise = show x :nabeatsuOfWorld(xs) find : String -> Char -> Bool find [] _ = False find (x:s) y = if (x == y) then True else find(xs) y
本物のHaskellerであれば、もっと簡潔明快で美しく書けるんだろうけど、
今の自分の力量ではこんなところで落ち着く。まぁそこそこ明快かと。
(追記)
アホ且つ気持ちいいが表現できていませんでしたね(^-^;)
修正版をあげておきます
{- Haskellで世界のナベアツ -} main = return (nabeatsuOfWorld [1..40]) >>= print {- 3の倍数と3の付く数字だけアホになり、8の倍数だけ気持ち良くなります -} nabeatsuOfWorld :: [Int] -> [String] nabeatsuOfWorld [] = [] nabeatsuOfWorld (x:xs) | aho x && ahan x = (show x ++ "AhoAhan") : nabeatsuOfWorld(xs) -- 3の倍数または3の付く数字または8の倍数で、アホ気持ち良くなる | aho x = (show x ++ "Aho") : nabeatsuOfWorld(xs) -- 3の倍数または3の付く数字でアホになる | ahan x = (show x ++ "Ahan") : nabeatsuOfWorld(xs) -- 8の倍数で気持ち良くなる | otherwise = show x : nabeatsuOfWorld(xs) aho :: Int -> Bool aho x = x `mod` 3 == 0 || find (show x) '3' ahan :: Int -> Bool ahan x = x `mod` 8 == 0 find :: String -> Char -> Bool find [] _ = False find (x:xs) y = if (x == y) then True else find(xs) y