From 7a2a388e846d27c03918a4bb231a442588831b8c Mon Sep 17 00:00:00 2001 From: Daniele Fucini Date: Tue, 9 Dec 2025 17:11:20 +0100 Subject: [PATCH] Add Day 8, Puzzle 2 solution --- src/Day08.hs | 23 +++++++++++++++++++++++ src/Main.hs | 5 ++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/Day08.hs b/src/Day08.hs index 52aec0c..bcc022c 100644 --- a/src/Day08.hs +++ b/src/Day08.hs @@ -2,6 +2,7 @@ module Day08 ( day08_1, + day08_2, ) where @@ -45,6 +46,17 @@ buildCircuits [] circuits _ = circuits buildCircuits _ circuits 0 = circuits buildCircuits ((x, y, _) : xs) circuits n = buildCircuits xs (mergeCircuits x y circuits) (n - 1) +findLastPoint :: [(Point, Point, Float)] -> [[Point]] -> (Point, Point) +findLastPoint [] _ = ((0, 0, 0), (0, 0, 0)) +findLastPoint ((x, y, _) : xs) circuits = + let circuits' = mergeCircuits x y circuits + in if length circuits' == 1 + then (x, y) + else findLastPoint xs circuits' + +getX :: Point -> Int +getX (x, _, _) = x + parseInput :: IO [Point] parseInput = do input <- lines <$> readFile "input/day8.txt" @@ -61,3 +73,14 @@ day08_1 = do putStrLn $ "Day 8, Puzzle 1 solution: " ++ show result + +day08_2 :: IO () +day08_2 = do + points <- parseInput + let distances = getSortedDistances points + points' = map (: []) points + lastPoints = findLastPoint distances points' + result = getX (fst lastPoints) * getX (snd lastPoints) + putStrLn $ + "Day 8, Puzzle 2 solution: " + ++ show result diff --git a/src/Main.hs b/src/Main.hs index 0d50156..4eab540 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -7,7 +7,7 @@ import Day04 (day04_1, day04_2) import Day05 (day05_1, day05_2) import Day06 (day06_1, day06_2) import Day07 (day07_1) -import Day08 (day08_1) +import Day08 (day08_1, day08_2) import System.Environment (getArgs) main :: IO () @@ -48,8 +48,10 @@ main = do "7" : _ -> do day07_1 "8" : "1" : _ -> day08_1 + "8" : "2" : _ -> day08_2 "8" : _ -> do day08_1 + day08_2 "all" : _ -> do day01_1 day01_2 @@ -65,4 +67,5 @@ main = do day06_2 day07_1 day08_1 + day08_2 _ -> error "Not implemented"