Skip to content

Instantly share code, notes, and snippets.

@antonijn
Created June 7, 2015 20:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save antonijn/1ea525fbb2cbf039eb9e to your computer and use it in GitHub Desktop.
Save antonijn/1ea525fbb2cbf039eb9e to your computer and use it in GitHub Desktop.
import Data.Char
writeOut :: Int -> String
writeOut 1 = "one"
writeOut 2 = "two"
writeOut 3 = "three"
writeOut 4 = "four"
writeOut 5 = "five"
writeOut 6 = "six"
writeOut 7 = "seven"
writeOut 8 = "eight"
writeOut 9 = "nine"
writeOut 10 = "ten"
writeOut 11 = "eleven"
writeOut 12 = "twelve"
writeOut 13 = "thirteen"
writeOut 14 = "fourteen"
writeOut 15 = "fifteen"
writeOut 16 = "sixteen"
writeOut 17 = "seventeen"
writeOut 18 = "eighteen"
writeOut 19 = "nineteen"
writeOut 20 = "twenty"
writeOut 30 = "thirty"
writeOut 40 = "fourty"
writeOut 50 = "fifty"
writeOut 60 = "sixty"
writeOut 70 = "seventy"
writeOut 80 = "eighty"
writeOut 90 = "ninety"
writeOut n
| mod n 1000 == 0 = writeOut (div n 1000) ++ " thousand"
| n > 1000 = let t = div n 1000 in writeOut (t * 1000) ++ " " ++ writeOut (n - t * 1000)
| mod n 100 == 0 = writeOut (div n 100) ++ " hundred"
| n > 100 = let h = div n 100 in writeOut (h * 100) ++ " and " ++ writeOut (n - h * 100)
| otherwise = let d = mod n 10 in writeOut (n - d) ++ "-" ++ writeOut d
main :: IO ()
main = print $ sum [1 | c <- concat $ map writeOut [1..1000], isAlpha c]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment