Add Day 8, Puzzle 2 solution
This commit is contained in:
23
src/Day08.hs
23
src/Day08.hs
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
module Day08
|
module Day08
|
||||||
( day08_1,
|
( day08_1,
|
||||||
|
day08_2,
|
||||||
)
|
)
|
||||||
where
|
where
|
||||||
|
|
||||||
@@ -45,6 +46,17 @@ buildCircuits [] circuits _ = circuits
|
|||||||
buildCircuits _ circuits 0 = circuits
|
buildCircuits _ circuits 0 = circuits
|
||||||
buildCircuits ((x, y, _) : xs) circuits n = buildCircuits xs (mergeCircuits x y circuits) (n - 1)
|
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 :: IO [Point]
|
||||||
parseInput = do
|
parseInput = do
|
||||||
input <- lines <$> readFile "input/day8.txt"
|
input <- lines <$> readFile "input/day8.txt"
|
||||||
@@ -61,3 +73,14 @@ day08_1 = do
|
|||||||
putStrLn $
|
putStrLn $
|
||||||
"Day 8, Puzzle 1 solution: "
|
"Day 8, Puzzle 1 solution: "
|
||||||
++ show result
|
++ 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
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import Day04 (day04_1, day04_2)
|
|||||||
import Day05 (day05_1, day05_2)
|
import Day05 (day05_1, day05_2)
|
||||||
import Day06 (day06_1, day06_2)
|
import Day06 (day06_1, day06_2)
|
||||||
import Day07 (day07_1)
|
import Day07 (day07_1)
|
||||||
import Day08 (day08_1)
|
import Day08 (day08_1, day08_2)
|
||||||
import System.Environment (getArgs)
|
import System.Environment (getArgs)
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
@@ -48,8 +48,10 @@ main = do
|
|||||||
"7" : _ -> do
|
"7" : _ -> do
|
||||||
day07_1
|
day07_1
|
||||||
"8" : "1" : _ -> day08_1
|
"8" : "1" : _ -> day08_1
|
||||||
|
"8" : "2" : _ -> day08_2
|
||||||
"8" : _ -> do
|
"8" : _ -> do
|
||||||
day08_1
|
day08_1
|
||||||
|
day08_2
|
||||||
"all" : _ -> do
|
"all" : _ -> do
|
||||||
day01_1
|
day01_1
|
||||||
day01_2
|
day01_2
|
||||||
@@ -65,4 +67,5 @@ main = do
|
|||||||
day06_2
|
day06_2
|
||||||
day07_1
|
day07_1
|
||||||
day08_1
|
day08_1
|
||||||
|
day08_2
|
||||||
_ -> error "Not implemented"
|
_ -> error "Not implemented"
|
||||||
|
|||||||
Reference in New Issue
Block a user