{-# 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)