euler/haskell/e017.hs

42 lines
1.4 KiB
Haskell

toWord :: Int -> [Char]
toWord = toWord' . show
toWord' :: [Char] -> [Char]
toWord' ('0':[]) = ""
toWord' ('1':[]) = "one"
toWord' ('2':[]) = "two"
toWord' ('3':[]) = "three"
toWord' ('4':[]) = "four"
toWord' ('5':[]) = "five"
toWord' ('6':[]) = "six"
toWord' ('7':[]) = "seven"
toWord' ('8':[]) = "eight"
toWord' ('9':[]) = "nine"
toWord' ('1':'0':[]) = "ten"
toWord' ('1':'1':[]) = "eleven"
toWord' ('1':'2':[]) = "twelve"
toWord' ('1':'3':[]) = "thirteen"
toWord' ('1':'4':[]) = "fourteen"
toWord' ('1':'5':[]) = "fifteen"
toWord' ('1':'6':[]) = "sixteen"
toWord' ('1':'7':[]) = "seventeen"
toWord' ('1':'8':[]) = "eighteen"
toWord' ('1':'9':[]) = "nineteen"
toWord' ('2':c:[]) = "twenty" ++ toWord' (c:[])
toWord' ('3':c:[]) = "thirty" ++ toWord' (c:[])
toWord' ('4':c:[]) = "forty" ++ toWord' (c:[])
toWord' ('5':c:[]) = "fifty" ++ toWord' (c:[])
toWord' ('6':c:[]) = "sixty" ++ toWord' (c:[])
toWord' ('7':c:[]) = "seventy" ++ toWord' (c:[])
toWord' ('8':c:[]) = "eighty" ++ toWord' (c:[])
toWord' ('9':c:[]) = "ninety" ++ toWord' (c:[])
toWord' (h:'0':'0':[]) = (toWord' (h:[])) ++ "hundred"
toWord' (h:'0':s:[]) = (toWord' (h:[])) ++ "hundredand" ++ (toWord' (s:[]))
toWord' (h:d:s:[]) = (toWord' (h:[])) ++ "hundredand" ++ (toWord' (d:s:[]))
toWord' (k:'0':'0':'0':[]) = (toWord' (k:[])) ++ "thousand"
toWord' (k:h:d:s:[]) = (toWord' (k:[])) ++ "thousand" ++ toWord' (h:d:s:[])