More tidying
authorNeil Smith <NeilNjae@users.noreply.github.com>
Sun, 15 Dec 2024 22:31:16 +0000 (22:31 +0000)
committerNeil Smith <NeilNjae@users.noreply.github.com>
Sun, 15 Dec 2024 22:31:16 +0000 (22:31 +0000)
advent15/Main.hs

index e4548efe665f36f4c8de05fce51fcbbd2d99fd36..211a97830493a494e66382997da23d439c7fde7f 100644 (file)
@@ -77,19 +77,18 @@ doBigCommand world dir
   | otherwise = world { robot = there }
   where there = world.robot ^+^ dir
         movedBox = bigBoxActual world.boxes there
-        rWorld = do boxMoves <- moveBigBoxes world dir movedBox
-                    let froms = fmap fst boxMoves
-                    let tos = fmap snd boxMoves
-                    let boxes' = (S.fromList tos) `S.union` (world.boxes `S.difference` (S.fromList froms))
-                    let world' = world { boxes = boxes' }
-                    return world' { robot = there } 
-
+        rWorld = 
+          do boxMoves <- moveBigBoxes world dir movedBox
+             let froms = S.fromList $ fmap fst boxMoves
+             let tos = S.fromList $ fmap snd boxMoves
+             let boxes' = S.union tos (world.boxes `S.difference` froms)
+             return world { boxes = boxes', robot = there }
 
 moveBigBoxes :: World -> Position -> Position -> Maybe [Move]
 moveBigBoxes world dir box
   | any (\t -> t `S.member` world.walls) there = Nothing
   | any (\t -> t `isBigBox` world.boxes) there = allMoves
-  | otherwise = Just [ thisMove ]
+  | otherwise = Just [ thisMove ]
   where there = case dir of 
                     U -> [box ^+^ U, box ^+^ R ^+^ U]
                     D -> [box ^+^ D, box ^+^ R ^+^ D]
@@ -97,7 +96,8 @@ moveBigBoxes world dir box
                     R -> [box ^+^ R ^+^ R]
                     _ -> []
         thisMove = (box, box ^+^ dir)
-        allMoves = do let there' = nub $ fmap (bigBoxActual world.boxes) $ filter (\t -> t `isBigBox` world.boxes) there
+        allMoves = do let there' = nub $ fmap (bigBoxActual world.boxes) 
+                            $ filter (\t -> t `isBigBox` world.boxes) there
                       moves <- traverse (moveBigBoxes world dir) there'
                       let moves' = concat moves
                       return $ thisMove : moves'