Add 2019 day 4

This commit is contained in:
Xavier Morel
2019-12-08 19:54:33 +01:00
parent dc7c4d3ce0
commit 5ba85e0ddb
2 changed files with 34 additions and 0 deletions

32
y2019/src/Day4.hs Normal file
View File

@@ -0,0 +1,32 @@
module Day4 (day4) where
import Data.List.Split
import Data.List
isValid :: (Int -> Bool) -> Int -> Bool
isValid groupsCriteria n = length6 && isSorted && hasGroups
where digits = show n
length6 = (length digits) == 6
isSorted = digits == sort digits
hasGroups = any (\d -> groupsCriteria (length d)) (group digits)
getNext :: (Int -> Bool) -> Int -> Int
getNext groupsCriteria cur
| isValid groupsCriteria (cur + 1) = (cur + 1)
| otherwise = getNext groupsCriteria (cur + 1)
day4 :: IO ()
day4 = do
putStrLn "AoC 2019 day 4"
putStr "Enter input >"
input <- getLine
putStrLn ""
let range = (map read (splitOn "-" input)) :: [Int]
putStrLn ("Range is " ++ show (range !! 0) ++ " to " ++ show (range !! 1))
let iterP1 = takeWhile (< (range !! 1)) (iterate (getNext (> 1)) (range !! 0))
putStrLn ("Part1: " ++ show ((length iterP1) - 1))
let iterP2 = takeWhile (< (range !! 1)) (iterate (getNext (== 2)) (range !! 0))
putStrLn ("Part2: " ++ show ((length iterP2) - 1))

View File

@@ -8,6 +8,7 @@ import System.Environment
import Day1
import Day2
import Day3
import Day4
-- TODO Better way?
load :: [String] -> IO ()
@@ -15,6 +16,7 @@ load [] = putStrLn "Usage: script [day]"
load ("1":_) = day1
load ("2":_) = day2
load ("3":_) = day3
load ("4":_) = day4
load _ = putStrLn "Unavailable date"
dayPicker :: IO ()