X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=advent11%2FMain.hs;h=41b28f1f4a2ab73f1707bd8ad84dd69b6c503168;hb=320c134b0e7dd42100c71316223f56c4682b954f;hp=283060d7c8a7bf470588aa87d9dc9a3580099805;hpb=bd05a32800503977f2641d1970538836790ce748;p=advent-of-code-23.git diff --git a/advent11/Main.hs b/advent11/Main.hs index 283060d..41b28f1 100644 --- a/advent11/Main.hs +++ b/advent11/Main.hs @@ -1,9 +1,9 @@ --- Writeup at https://work.njae.me.uk/2023/12/10/advent-of-code-2023-day-10/ +-- Writeup at https://work.njae.me.uk/2023/12/11/advent-of-code-2023-day-11/ import AoC -import Data.List -import Data.Maybe +-- import Data.List +-- import Data.Maybe import Linear (V2(..), (^+^), (^-^)) import qualified Data.Set as S @@ -18,27 +18,30 @@ main = let galaxies = mkGalaxies text -- print galaxies -- print $ expandGalaxies galaxies 10 + + -- print $ allDist $ expandGalaxies 2 galaxies + -- print $ allDist $ expandGalaxies (10^6) galaxies + print $ part1 galaxies print $ part2 galaxies part1, part2 :: Galaxies -> Int -part1 galaxies = allDistances $ expandGalaxies galaxies 2 - -part2 galaxies = allDistances $ expandGalaxies galaxies (10^6) +part1 = allDistances . expandGalaxies 2 +part2 = allDistances . expandGalaxies 10e6 allDistances :: Galaxies -> Int -allDistances gs = case S.minView gs of - Nothing -> 0 - Just (g, gs') -> (S.foldl' (addDist g) 0 gs) + allDistances gs' - where addDist g1 acc g2 = acc + distance g1 g2 +allDistances gs = snd $ S.foldl' addGalaxy (S.empty, 0) gs + where addGalaxy (seen, d) new = + (S.insert new seen, S.foldl' (addDist new) d seen) + addDist g1 d g2 = d + distance g1 g2 distance :: Position -> Position -> Int distance g1 g2 = abs dr + abs dc where (V2 dr dc) = g1 ^-^ g2 -expandGalaxies :: Galaxies -> Int -> Galaxies -expandGalaxies galaxies scale = galaxies'' +expandGalaxies :: Int -> Galaxies -> Galaxies +expandGalaxies scale galaxies = galaxies'' where er = emptyRows galaxies galaxies' = expandRows galaxies er scale ec = emptyCols galaxies'