feat: solve day2 part1

This commit is contained in:
Jacob Jonsson 2025-12-02 08:31:24 +01:00
parent 12d392e578
commit 2e8920cae1
Signed by: Jassob
GPG key ID: 7E30B9B047F7202E
2 changed files with 40 additions and 0 deletions

39
app/Day2.hs Normal file
View file

@ -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"