37 lines
959 B
Haskell
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)
|