Day 23, Part 1

This commit is contained in:
Daniele Fucini
2024-12-23 15:56:30 +01:00
parent 93ee53f0fe
commit 588b1e212f
5 changed files with 45 additions and 2 deletions

40
src/Day23.hs Normal file
View File

@@ -0,0 +1,40 @@
module Day23 (day23_1) where
import Control.Monad
import Data.Containers.ListUtils (nubOrd)
import Data.List (nub, sort)
import Data.List.Split (splitOn)
startsWithT :: String -> Bool
startsWithT [] = False
startsWithT (x : _)
| x == 't' = True
| otherwise = False
getConns3 :: [[String]] -> [[String]]
getConns3 connections = do
conn1 <- connections
conn2 <- connections
guard $
conn1 /= conn2
&& length (nub (conn1 ++ conn2)) == 3
&& any startsWithT (conn1 ++ conn2)
conn3 <- connections
guard $
conn1 /= conn3
&& conn2 /= conn3
&& length (nub (conn1 ++ conn2 ++ conn3)) == 3
&& any startsWithT (conn1 ++ conn2 ++ conn3)
return . nub $ conn1 ++ conn2 ++ conn3
day23_1 :: IO ()
day23_1 = do
contents <- lines <$> readFile "input/day23.txt"
let connections = map (splitOn "-") contents
putStrLn $
"Day 23, Puzzle 1 solution: "
++ show (length . nubOrd . map sort $ getConns3 connections)