X-Git-Url: http://git.jkinsey.net/?p=adventofcode2018.git;a=blobdiff_plain;f=day03%2Ffabric.hs;h=6d7504286e7ae71f7f85c998b77775ebf25f8121;hp=792158837376f978b04d26bec7895888fcec9c97;hb=481fb8d5d2c4c574a210097d7b441a2d925f7f76;hpb=bb8849f3f0f918151421dd01d2b191516f52d296 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]]