More tinkering
[advent-of-code-23.git] / advent11 / Main.hs
index 283060d7c8a7bf470588aa87d9dc9a3580099805..41b28f1f4a2ab73f1707bd8ad84dd69b6c503168 100644 (file)
@@ -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'