23 lines
796 B
Haskell
23 lines
796 B
Haskell
--The answer is written for numbers <= 1000
|
|
|
|
main :: IO ()
|
|
main = putStr $ show $ solve 1000
|
|
|
|
solve :: Int -> Int
|
|
solve n = sum $ map (length . numWord) [1 .. n]
|
|
|
|
numWord :: Int -> [Char]
|
|
numWord n
|
|
| n == 0 = ""
|
|
| n == 1000 = "onethousand"
|
|
| n < 20 = ones !! (n - 1)
|
|
| n < 100 = tens !! (div n 10 - 2) ++ numWord (mod n 10)
|
|
| mod n 100 == 0 = numWord (div n 100) ++ "hundred"
|
|
| otherwise = numWord (div n 100) ++ "hundredand" ++ numWord (mod n 100)
|
|
where
|
|
tens :: [[Char]]
|
|
tens = ["twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"]
|
|
|
|
ones :: [[Char]]
|
|
ones = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"]
|