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 (10^6)
allDistances :: Galaxies -> Int
allDistances gs = case S.minView gs of
Nothing -> 0
- Just (g, gs') -> (S.foldl' (
- addDist g) 0 gs) + allDistances gs'
+ Just (g, gs') -> (S.foldl' (addDist g) 0 gs) + allDistances gs'
where addDist g1 acc g2 = acc + distance g1 g2
distance :: Position -> Position -> Int
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'