Tidying
authorNeil Smith <NeilNjae@users.noreply.github.com>
Thu, 12 Dec 2024 16:18:14 +0000 (16:18 +0000)
committerNeil Smith <NeilNjae@users.noreply.github.com>
Thu, 12 Dec 2024 16:18:14 +0000 (16:18 +0000)
advent12/Main.hs
advent12/MainOriginal.hs

index 242ca9b18c27a959bfdf0e00fad45bb511daca4e..bafb885ab6dd243b5c479a830f85f83ec91254d4 100644 (file)
@@ -5,10 +5,9 @@ import Linear
 -- import qualified Data.Set as S
 import qualified Data.Map.Strict as M
 import Data.Map.Strict ((!))
-import Data.List (foldl')
+import Data.List (foldl', nub)
 
 type Position = V2 Int -- r, c
--- type Bounds = (Position, Position)
 data Plot = Plot { pos :: Position, plant :: Char, fenceLength :: Int }
   deriving (Show, Eq, Ord)
 
@@ -39,11 +38,12 @@ class Ord a => Joinable a where
     | x' == y' = uf
     | rankX < rankY = M.insert x' (UFElement y' rankX) uf
     | rankX > rankY = M.insert y' (UFElement x' rankY) uf
-    | otherwise = M.insert y' (UFElement x' (rankX + 1)) uf
+    | otherwise = M.insert y' (UFElement x' rankY) $ M.insert x' newRoot uf
     where x' = exemplar uf x
           y' = exemplar uf y
           UFElement _ rankX = uf ! x'
           UFElement _ rankY = uf ! y'
+          newRoot = UFElement x' (rankX + 1)
 
   merge :: UFind a -> UFind a
   merge uf = foldl' mergeItem uf $ M.keys uf
@@ -63,7 +63,8 @@ class Ord a => Joinable a where
   meets :: a -> a -> Bool
 
 instance Joinable Plot where
-  meets plot1 plot2 = plot1.pos `elem` neighbours plot2.pos && plot1.plant == plot2.plant
+  meets plot1 plot2 = 
+    plot1.pos `elem` neighbours plot2.pos && plot1.plant == plot2.plant
 
 instance Joinable SideFragment where
   meets (SideFragment p1 T) (SideFragment p2 T) = p1 `elem` neighboursH p2
index f14ba1e662e2eaa3ea41f60c91e63b60c6a77e8b..424d2f3e96d2567087b46653277e24b8f4362ed8 100644 (file)
@@ -7,7 +7,6 @@ import qualified Data.Map.Strict as M
 import Data.Map.Strict ((!))
 
 type Position = V2 Int -- r, c
--- type Bounds = (Position, Position)
 data Plot = Plot { pos :: Position, plant :: Char, fenceLength :: Int }
   deriving (Show, Eq, Ord)
 
@@ -18,26 +17,6 @@ data SideFragment = SideFragment Position Facing
   deriving (Show, Eq, Ord)
 type Side = S.Set SideFragment
 
-data UFElement a = UFElemeent a Int -- the rank
-  deriving (Show, Eq, Ord)
-  
-type UFind a = M.Map a (UFElement a)
-
-class Joinable a where
-  exemplar :: UFind a -> a -> a
-  join :: UFind a -> a -> a -> UFind a
-  meets :: a -> a -> Bool
-
-instance Joinable Plot where
-  meets plot1 plot2 = plot1.pos `elem` neighbours plot2.pos && plot1.plant == plot2.plant
-
-instance Joinable SideFragment where
-  meets (SideFragment p1 T) (SideFragment p2 T) = p1 `elem` neighboursH p2
-  meets (SideFragment p1 B) (SideFragment p2 B) = p1 `elem` neighboursH p2
-  meets (SideFragment p1 L) (SideFragment p2 L) = p1 `elem` neighboursV p2
-  meets (SideFragment p1 R) (SideFragment p2 R) = p1 `elem` neighboursV p2
-  meets _ _ = False
-
 main :: IO ()
 main = 
   do  dataFileName <- getDataFileName