From 2e8920cae111c2aed5ce9854681450d4a61c67ab Mon Sep 17 00:00:00 2001 From: Jacob Jonsson Date: Tue, 2 Dec 2025 08:31:24 +0100 Subject: [PATCH] feat: solve day2 part1 --- app/Day2.hs | 39 +++++++++++++++++++++++++++++++++++++++ input/day2.txt | 1 + 2 files changed, 40 insertions(+) create mode 100644 app/Day2.hs create mode 100644 input/day2.txt diff --git a/app/Day2.hs b/app/Day2.hs new file mode 100644 index 0000000..80e4d78 --- /dev/null +++ b/app/Day2.hs @@ -0,0 +1,39 @@ +module Main where + +import System.Environment (getArgs) + +main :: IO () +main = do + input <- readFile . head =<< getArgs + print $ part1 input + +-- print $ part2 input + +part1 :: String -> Int +part1 = sum . filter invalid . concat . map ids . map parse . splitOn ',' + +splitOn :: (Eq a) => a -> [a] -> [[a]] +splitOn delim xs = case dropWhile (== delim) xs of + [] -> [] + s' -> xs' : splitOn delim s'' + where + (xs', s'') = break (== delim) s' + +parse :: String -> (Int, Int) +parse = group . map read . splitOn '-' + where + group :: (Show a) => [a] -> (a, a) + group (x : y : []) = (x, y) + group x = error $ "group: " ++ show x ++ "is not two elements" + +ids :: (Int, Int) -> [Int] +ids (start, end) = [start .. end] + +invalid :: Int -> Bool +invalid i = + let s = show i + len = length s + half = take (len `div` 2) s + in s == half ++ half + +testInput = "11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124" diff --git a/input/day2.txt b/input/day2.txt new file mode 100644 index 0000000..a5c306c --- /dev/null +++ b/input/day2.txt @@ -0,0 +1 @@ +5529687-5587329,50-82,374-560,83-113,226375-287485,293169-368713,2034-2634,9945560-9993116,4872472-4904227,3218-5121,1074-1357,15451-26093,483468003-483498602,51513-85385,1466-1992,7600-13034,710570-789399,407363-480868,3996614725-3996662113,3-17,5414907798-5414992881,86274-120443,828669-909588,607353-700604,4242340614-4242556443,28750-44009,935177-1004747,20-41,74678832-74818251,8484825082-8484860878,2784096938-2784156610,5477-7589,621-952,2424167145-2424278200,147085-217900,93043740-93241586