Advent of Code 2022 fan bonus
As a quick bonus, user MBoffin on Reddit posted about a bonus puzzle their daughter made.
It seemed like a good fit for Haskell, so I decided to have a go.
Finding the duplicated characters slotted directly into Haskell's list- and stream-processing idioms, so I used Data.List
's group
function to split the string into a list of strings, then threw away all the groups that were only one character long.
After that, it was a filter
to pull out just the characters I wanted.
I had to define my own isLetterIsh
predicate to find letters and dashes, as needed for part 1.
main :: IO ()
main =
do dataFileName <- getDataFileName
text <- readFile dataFileName
let duplicated = fmap head $ filter ((> 1) . length) $ group text
putStrLn $ filter isLetterIsh duplicated
putStrLn $ filter isDigit duplicated
isLetterIsh :: Char -> Bool
isLetterIsh c = (isLetter c) || (c == '-')
Code
You can get the code from my locally-hosted Git repo, or from Gitlab.