AoC/2023/day01/day01.hs
2023-12-01 15:35:18 +01:00

21 lines
713 B
Haskell

{-# LANGUAGE OverloadedStrings #-}
import Data.Char
import Control.Arrow
import qualified Data.Text as T
main :: IO ()
main = do
let nums = [("one", "o1ne"), ("two", "t2wo"), ("three", "th3ree"), ("four", "fo4ur"), ("five", "fi5ve"), ("six", "si6x"), ("seven", "se7ven"), ("eight", "eig8ht"), ("nine", "ni9ne")]
input <- init . T.splitOn "\n" . T.pack <$> readFile "input"
print $ day1a input
print $ day1a $ day1b input nums
day1a :: [T.Text] -> Int
day1a = sum . map ((T.head &&& T.last >>> (\(x, y) -> read [x,y])) . T.filter isDigit)
day1b :: [T.Text] -> [(T.Text,T.Text)] -> [T.Text]
day1b txt nums = map numfold txt
where rep z (x,y) = T.replace x y z
numfold x = foldl rep x nums