haskell: add [p12, p17]

Signed-off-by: Amneesh Singh <natto@weirdnatto.in>
This commit is contained in:
2022-11-07 19:17:35 +05:30
parent 22fdf20500
commit de6ea02b14
7 changed files with 185 additions and 5 deletions

22
haskell/p17.hs Normal file
View File

@@ -0,0 +1,22 @@
--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"]