X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=src%2Fadvent06%2Fadvent06.hs;h=46252ff2e092b1fcfc0da6256d12cf430d7adcbc;hb=8227e18e534ac192b718bbfe0592e81a30f2a433;hp=74e11f7767862bf44c45dda57d1f708501a5a4e8;hpb=d9bed1316d919ba8bdb27317c84c1ebf2644107c;p=advent-of-code-18.git diff --git a/src/advent06/advent06.hs b/src/advent06/advent06.hs index 74e11f7..46252ff 100644 --- a/src/advent06/advent06.hs +++ b/src/advent06/advent06.hs @@ -23,8 +23,6 @@ main = do text <- TIO.readFile "data/advent06.txt" let coords = successfulParse text let boundingBox = findBounds coords - print $ length coords - print boundingBox print $ part1 coords boundingBox print $ part2 coords boundingBox @@ -48,17 +46,14 @@ nearestStart tieLabel cell starts = nearestLabel then tieLabel else snd (distances!!0) - safeCells :: [Coord] -> Bounds -> Region safeCells coords (minX, maxX, minY, maxY) = M.fromList distanceCells where cells = [(x, y) | x <- [minX .. maxX], y <- [minY .. maxY] ] distanceCells = map (\c -> (c, fromIntegral $ sumDistance c coords) ) cells - sumDistance :: Coord -> [Coord] -> Integer sumDistance here others = sum $ map (\c -> distance here c) others - infinite :: Region -> Bounds -> [Int] infinite regions (minX, maxX, minY, maxY) = nub $ sort $ M.elems $ M.filterWithKey onEdge regions where onEdge (x, y) _ = (x == minX) || (x == maxX) || (y == minY) || (y == maxY) @@ -67,20 +62,18 @@ finite :: [Int] -> Region -> Region finite excluded regions = M.filter (\r -> r `notElem` excludedTied) regions where excludedTied = (0:excluded) - regionSizes :: Region -> [(Int, Int)] regionSizes regions = map (\g -> (g!!0, length g)) $ group $ sort $ M.elems regions - largestRegion :: [(Int, Int)] -> Int largestRegion = maximum . map snd findBounds :: [Coord] -> (Integer, Integer, Integer, Integer) -findBounds coords = ( minX - (maxY - minY) -- small x edge - , maxX + (maxY - minY) -- large x edge - , minY - (maxX - minX) -- small x edge - , maxY + (maxX - minX) -- large y edge +findBounds coords = ( minX -- small x edge + , maxX -- large x edge + , minY -- small x edge + , maxY -- large y edge ) where maxX = maximum $ map fst coords minX = minimum $ map fst coords @@ -98,7 +91,6 @@ type Parser = Parsec Void Text sc :: Parser () sc = L.space (skipSome spaceChar) CA.empty CA.empty --- sc = L.space (skipSome (char ' ')) CA.empty CA.empty lexeme = L.lexeme sc integer = lexeme L.decimal @@ -106,7 +98,6 @@ symb = L.symbol sc commaP = symb "," - coordFileP = many coordP coordP = (,) <$> integer <* commaP <*> integer