diff --git a/y2019/src/Day4.hs b/y2019/src/Day4.hs new file mode 100644 index 0000000..9734586 --- /dev/null +++ b/y2019/src/Day4.hs @@ -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)) diff --git a/y2019/src/DayPicker.hs b/y2019/src/DayPicker.hs index 2cc0839..b0ab92d 100644 --- a/y2019/src/DayPicker.hs +++ b/y2019/src/DayPicker.hs @@ -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 ()