Files
aoc2025/app/2.hs
2025-12-02 10:05:40 +01:00

37 lines
959 B
Haskell

{-# LANGUAGE LambdaCase, OverloadedStrings #-}
module Main where
import Data.Text (Text)
import Data.Text qualified as T
import Data.Text.IO qualified as T
import Data.Functor
parse :: Text -> [(Int,Int)]
parse = map
((\(a,b) -> (read (T.unpack a), read (T.unpack $ T.drop 1 b))) . T.breakOn "-") .
T.split (==',')
solve1 :: [(Int,Int)] -> Int
solve1 = sum . go . (>>= \(a,b) -> [a..b])
where
go :: [Int] -> [Int]
go = filter
(\a -> let d = T.show a in uncurry (==) $
T.splitAt (T.length d `div` 2) d)
solve2 :: [(Int,Int)] -> Int
solve2 = sum . go . (>>= \(a,b) -> [a..b])
where
go :: [Int] -> [Int]
go = filter
(\a -> let d = T.show a in
or $ [1..T.length d - 1] >>= \i ->
let c = T.chunksOf i d in pure $
all (== head c) c)
main :: IO ()
main = T.readFile "inputs/2" <&> parse >>= \i ->
print (solve1 i) >>
print (solve2 i)