Skip to content

Instantly share code, notes, and snippets.

@fbiville
Last active August 29, 2015 14:13
Show Gist options
  • Save fbiville/f1bd341bf246f822cd6e to your computer and use it in GitHub Desktop.
Save fbiville/f1bd341bf246f822cd6e to your computer and use it in GitHub Desktop.
main :: IO ()
main = print $ countLetters [1..1000]
countLetters :: [Int] -> Int
countLetters = sum . (map (length . translate))
translate :: Int -> String
translate 0 = ""
translate 1 = "one"
translate 2 = "two"
translate 3 = "three"
translate 4 = "four"
translate 5 = "five"
translate 6 = "six"
translate 7 = "seven"
translate 8 = "eight"
translate 9 = "nine"
translate 10 = "ten"
translate 11 = "eleven"
translate 12 = "twelve"
translate 13 = "thirteen"
translate 14 = "fourteen"
translate 15 = "fifteen"
translate 16 = "sixteen"
translate 17 = "seventeen"
translate 18 = "eighteen"
translate 19 = "nineteen"
translate 20 = "twenty"
translate 30 = "thirty"
translate 40 = "forty"
translate 50 = "fifty"
translate 60 = "sixty"
translate 70 = "seventy"
translate 80 = "eighty"
translate 90 = "ninety"
translate 1000 = "onethousand"
translate n
| n >= 100 = let ten = (translate (n `mod` 100)) in (translate (n `div` 100)) ++ "hundred" ++ (if (null ten) then "" else "and"++ten)
| otherwise = let digit = (n `mod` 10) in (translate (n-digit)) ++ (translate digit)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment