From: Jack Kinsey Date: Mon, 3 Dec 2018 16:45:24 +0000 (-0500) Subject: Day 3: Extract unoverlap into its own function X-Git-Url: http://git.jkinsey.net/?p=adventofcode2018.git;a=commitdiff_plain;h=481fb8d5d2c4c574a210097d7b441a2d925f7f76 Day 3: Extract unoverlap into its own function --- diff --git a/day03/fabric.hs b/day03/fabric.hs index 7921588..6d75042 100644 --- a/day03/fabric.hs +++ b/day03/fabric.hs @@ -6,7 +6,7 @@ main = do let layout = claimOverlap claims let counts = M.fromListWith (+) . map (\v -> (v,1)) . M.elems $ layout print $ counts M.! (-1) - print . index . head . filter (\c -> (fst . size $ c)*(snd . size $ c) == M.findWithDefault 0 (index c) counts) $ claims + print . index . claimUnoverlapped counts $ claims data Claim = Claim { index :: Int , coord :: (Int, Int) @@ -24,6 +24,12 @@ claimOverlap = foldl go M.empty . map claimedAreas go :: ClaimMap -> [(Int, (Int, Int))] -> ClaimMap go cmap = foldl mn cmap +claimUnoverlapped :: M.Map Int Int -> [Claim] -> Claim +claimUnoverlapped counts = head . filter go + where go :: Claim -> Bool + go (Claim ind _ (sx, sy)) = + (Just (sx*sy)) == counts M.!? ind + claimedAreas :: Claim -> [(Int, (Int, Int))] claimedAreas (Claim ind (cx, cy) (sx, sy)) = [(ind,(i,j)) | i <- [cx+1..cx+sx], j <- [cy+1..cy+sy]]