From: Neil Smith Date: Mon, 19 Dec 2022 14:07:14 +0000 (+0000) Subject: Done day 18 X-Git-Url: https://git.njae.me.uk/?p=advent-of-code-22.git;a=commitdiff_plain;h=2b58adc795652b845b6ceba6eebab9cfd01f401a Done day 18 --- diff --git a/advent-of-code22.cabal b/advent-of-code22.cabal index 32e063a..74c5ea9 100644 --- a/advent-of-code22.cabal +++ b/advent-of-code22.cabal @@ -185,4 +185,8 @@ executable advent17 import: common-extensions, build-directives main-is: advent17/Main.hs build-depends: containers, linear, lens - \ No newline at end of file + +executable advent18 + import: common-extensions, build-directives + main-is: advent18/Main.hs + build-depends: text, attoparsec, containers, linear, lens diff --git a/advent18/Main.hs b/advent18/Main.hs new file mode 100644 index 0000000..f16e6df --- /dev/null +++ b/advent18/Main.hs @@ -0,0 +1,72 @@ +-- Writeup at https://work.njae.me.uk/2022/12/19/advent-of-code-2022-day-18/ + +import AoC +import Data.Text (Text) +import qualified Data.Text.IO as TIO +import Data.Attoparsec.Text hiding (take, D) +-- import Control.Applicative +import qualified Data.Set as S +import Linear +import Control.Lens +import Data.Ix +import Data.Maybe + +type Droplet = V3 Int +type Lava = S.Set Droplet + +main :: IO () +main = + do dataFileName <- getDataFileName + text <- TIO.readFile dataFileName + let lava = successfulParse text + print $ part1 lava + print $ part2 lava + +part1, part2 :: Lava -> Int +part1 lava = surfaceArea lava + +part2 lava = surfaceArea enclosed + where box = boundingBox lava + steam = floodFill lava box (S.singleton $ head $ range box) S.empty + enclosed = (S.fromList (range box)) `S.difference` steam + +surfaceArea :: Lava -> Int +surfaceArea lava = sum $ fmap countFree $ S.elems lava + where countFree droplet = 6 - (S.size $ S.intersection lava (neigbours droplet)) + +neigbours :: Droplet -> Lava +neigbours here = S.fromList [ here & d %~ (+) n | d <- [_x, _y, _z], n <- [- 1, 1]] + +boundingBox :: Lava -> (Droplet, Droplet) +boundingBox lava = ((V3 minX minY minZ), (V3 maxX maxY maxZ)) + where minX = (fromJust $ minimumOf (folded . _x) lava) - 1 + minY = (fromJust $ minimumOf (folded . _y) lava) - 1 + minZ = (fromJust $ minimumOf (folded . _z) lava) - 1 + maxX = (fromJust $ maximumOf (folded . _x) lava) + 1 + maxY = (fromJust $ maximumOf (folded . _y) lava) + 1 + maxZ = (fromJust $ maximumOf (folded . _z) lava) + 1 + +floodFill :: Lava -> (Droplet, Droplet) -> Lava -> Lava -> Lava +floodFill lava box boundary found + | S.null boundary = found + | otherwise = floodFill lava box (S.union nbrs $ S.delete here boundary) (S.insert here found) + where here = S.findMin boundary + nbrs = S.filter (`S.notMember` lava) + $ S.filter (`S.notMember` boundary) + $ S.filter (`S.notMember` found) + $ S.filter (inRange box) + $ neigbours here + +-- Parse the input file + +lavaP :: Parser Lava +dropletP :: Parser Droplet + +lavaP = S.fromList <$> dropletP `sepBy` endOfLine +dropletP = V3 <$> (decimal <* ",") <*> (decimal <* ",") <*> decimal + +successfulParse :: Text -> Lava +successfulParse input = + case parseOnly lavaP input of + Left _err -> S.empty -- TIO.putStr $ T.pack $ parseErrorPretty err + Right lava -> lava diff --git a/data/advent18.txt b/data/advent18.txt new file mode 100644 index 0000000..ad9a8f7 --- /dev/null +++ b/data/advent18.txt @@ -0,0 +1,2165 @@ +7,2,7 +12,2,8 +11,18,11 +7,6,3 +7,7,17 +9,15,2 +12,17,8 +12,8,3 +11,6,17 +8,18,10 +11,14,3 +16,14,8 +12,5,4 +7,4,14 +10,3,15 +4,16,7 +14,13,15 +13,17,8 +8,17,13 +3,14,12 +7,17,11 +3,15,12 +5,12,15 +17,8,10 +8,17,9 +3,12,11 +16,12,7 +12,4,8 +12,10,1 +7,12,17 +15,12,11 +9,5,15 +9,17,8 +8,13,3 +8,15,5 +5,7,14 +9,2,13 +3,9,8 +11,4,12 +5,10,14 +7,8,2 +9,3,4 +10,12,2 +9,5,16 +7,14,16 +14,18,11 +6,14,16 +4,13,10 +6,10,17 +9,9,18 +12,4,6 +2,8,13 +4,6,12 +17,13,7 +16,7,7 +8,6,16 +15,6,12 +11,16,12 +9,1,8 +13,16,9 +16,13,10 +15,7,4 +9,15,16 +9,17,6 +3,12,6 +12,14,15 +12,1,8 +5,8,4 +10,18,11 +12,4,3 +13,12,3 +3,5,7 +15,6,6 +16,11,16 +4,13,6 +3,4,10 +13,12,2 +16,8,6 +12,17,9 +9,11,16 +9,17,12 +16,10,14 +16,9,6 +14,3,11 +9,8,19 +16,6,6 +4,3,11 +17,10,5 +17,13,11 +14,15,13 +13,5,4 +16,12,4 +13,15,15 +4,4,6 +16,7,14 +6,17,8 +9,17,9 +13,15,11 +14,16,10 +9,2,7 +17,10,8 +12,9,2 +9,11,18 +9,11,17 +16,6,9 +3,14,8 +4,4,7 +7,15,7 +8,7,17 +10,7,3 +14,10,14 +15,11,16 +7,3,13 +14,10,3 +13,10,2 +12,12,4 +4,8,4 +1,8,9 +11,13,2 +12,6,16 +11,10,17 +1,9,11 +5,16,10 +9,15,5 +3,9,7 +8,11,17 +10,2,10 +16,7,4 +10,18,9 +12,3,11 +10,11,1 +10,2,8 +13,7,15 +11,11,16 +2,13,5 +3,8,9 +14,3,6 +12,10,17 +7,1,10 +8,5,15 +11,15,4 +4,15,11 +12,2,12 +8,9,17 +15,14,6 +7,14,13 +8,4,5 +9,3,12 +4,16,12 +6,3,7 +9,3,13 +16,5,13 +10,1,10 +6,12,15 +11,7,16 +8,10,18 +10,17,7 +3,14,6 +3,8,5 +2,11,8 +13,4,4 +6,4,6 +8,16,13 +12,9,17 +7,12,2 +15,6,5 +15,5,11 +10,8,16 +4,13,7 +15,6,15 +5,12,3 +2,9,13 +2,8,10 +12,3,6 +7,3,14 +12,16,7 +10,17,13 +14,4,5 +5,15,15 +15,9,3 +11,2,12 +5,3,13 +6,15,15 +6,2,8 +9,5,2 +4,6,14 +15,14,8 +8,9,18 +7,5,12 +11,7,1 +10,15,16 +5,16,12 +4,12,14 +9,1,12 +9,1,13 +17,7,6 +4,7,13 +13,15,12 +5,14,13 +16,5,5 +14,7,7 +6,11,3 +8,11,1 +4,8,13 +5,2,8 +8,4,4 +12,3,7 +11,9,17 +4,10,5 +4,11,16 +15,8,14 +8,4,13 +14,8,3 +6,6,5 +8,3,8 +14,16,8 +7,10,1 +14,10,17 +15,11,15 +11,13,5 +5,9,3 +12,7,17 +16,8,16 +17,13,8 +11,9,3 +7,3,8 +17,14,9 +17,11,7 +6,16,11 +3,5,8 +12,5,3 +17,5,6 +14,9,16 +9,16,6 +9,7,2 +14,14,14 +14,15,10 +16,13,12 +8,3,4 +11,6,15 +1,10,11 +14,11,13 +9,17,13 +4,10,4 +9,2,6 +10,5,15 +10,4,16 +8,5,16 +6,14,15 +10,10,15 +13,2,8 +4,5,10 +3,13,7 +17,7,10 +16,12,6 +15,4,13 +7,14,3 +8,6,3 +5,13,13 +14,11,2 +6,4,11 +8,17,8 +5,16,9 +13,7,3 +16,9,14 +15,6,11 +9,14,6 +4,6,15 +3,8,14 +14,17,10 +3,13,11 +18,10,9 +10,16,13 +12,1,7 +14,12,10 +12,14,5 +16,7,13 +4,7,11 +9,9,1 +11,4,3 +6,4,8 +5,16,8 +15,11,6 +6,11,17 +9,15,15 +5,14,14 +8,10,17 +4,16,11 +3,13,4 +3,10,14 +9,5,4 +5,15,14 +6,8,2 +5,3,9 +4,9,5 +15,12,13 +11,16,6 +5,4,5 +11,15,9 +14,6,14 +17,8,7 +18,11,7 +10,4,4 +8,3,9 +4,13,13 +3,3,11 +16,9,5 +3,6,5 +6,13,3 +2,10,11 +11,15,3 +14,2,9 +10,12,18 +11,4,9 +5,13,14 +6,15,5 +7,15,14 +5,4,13 +1,7,9 +3,9,14 +11,11,17 +10,16,9 +7,17,9 +9,2,11 +8,8,2 +16,9,4 +3,6,7 +9,6,3 +5,12,16 +14,9,3 +12,13,2 +15,6,7 +7,5,3 +15,3,10 +7,2,9 +11,15,5 +15,16,10 +15,11,13 +10,4,5 +11,5,15 +1,13,7 +17,11,6 +7,13,15 +10,3,4 +8,1,9 +5,5,11 +17,8,6 +9,1,7 +9,2,12 +16,7,12 +9,12,18 +17,6,10 +14,7,8 +6,15,12 +13,9,17 +14,17,11 +13,7,4 +15,3,11 +11,5,16 +14,10,15 +11,0,10 +8,14,4 +12,14,7 +14,17,12 +13,13,13 +6,4,9 +5,16,15 +10,1,12 +10,9,18 +11,3,7 +17,10,14 +3,11,13 +15,4,6 +9,3,11 +5,10,4 +12,14,16 +3,10,13 +9,12,3 +6,16,13 +6,8,3 +5,4,8 +5,3,5 +15,13,9 +14,14,15 +13,13,3 +8,16,11 +5,11,5 +5,17,7 +5,5,7 +13,16,8 +18,12,11 +10,4,15 +6,14,6 +4,15,7 +7,5,4 +14,4,7 +16,12,9 +13,11,17 +2,9,8 +9,1,10 +11,5,3 +14,3,7 +11,14,13 +14,11,3 +2,11,11 +2,8,8 +14,8,16 +15,13,5 +5,7,2 +10,8,17 +11,6,2 +6,12,17 +14,6,5 +6,13,4 +10,18,7 +12,3,14 +2,10,12 +4,4,8 +5,8,14 +9,14,4 +4,5,8 +9,13,18 +3,11,6 +10,10,1 +13,5,15 +10,7,1 +14,9,4 +16,10,5 +15,4,12 +12,9,16 +2,10,10 +11,17,7 +15,9,4 +16,13,14 +15,8,5 +4,14,15 +6,3,10 +6,17,6 +5,11,3 +6,10,2 +10,7,17 +11,10,18 +12,7,16 +13,4,5 +13,15,9 +14,10,4 +16,4,8 +4,9,4 +14,8,15 +10,13,2 +8,11,3 +6,2,10 +8,8,16 +7,17,6 +1,8,11 +13,6,4 +10,3,14 +17,9,13 +16,5,9 +14,11,16 +3,5,14 +17,11,13 +2,9,12 +1,10,10 +16,7,11 +7,5,5 +9,13,5 +11,4,6 +2,7,13 +12,17,7 +7,3,7 +16,5,11 +9,12,1 +3,12,5 +16,5,6 +13,3,12 +7,14,4 +8,2,13 +12,16,14 +15,4,7 +15,15,11 +9,6,4 +3,9,15 +8,2,10 +15,4,10 +9,17,7 +4,4,9 +7,12,4 +11,16,13 +2,12,7 +11,10,2 +8,4,6 +11,2,11 +6,4,14 +9,16,4 +11,1,9 +11,9,1 +15,14,11 +4,6,4 +15,5,8 +16,14,7 +15,12,14 +15,4,11 +15,10,3 +13,12,17 +8,15,4 +6,5,14 +8,4,15 +1,8,8 +13,8,2 +10,16,15 +14,12,16 +15,16,9 +11,15,12 +16,8,7 +14,14,12 +5,8,2 +10,7,16 +5,17,10 +2,6,10 +8,14,17 +13,11,14 +6,10,16 +17,8,8 +6,9,3 +12,13,16 +13,3,10 +8,3,6 +6,7,17 +3,7,6 +12,2,9 +14,5,14 +13,6,16 +7,3,11 +2,12,9 +6,8,17 +14,15,12 +16,10,4 +17,5,12 +11,8,16 +3,13,9 +7,1,6 +9,7,18 +4,7,15 +5,15,4 +16,5,8 +12,16,5 +3,3,8 +13,17,9 +7,17,13 +16,8,5 +4,14,12 +14,4,6 +9,15,13 +10,3,13 +5,15,10 +16,14,9 +7,11,2 +7,12,6 +5,17,12 +3,15,9 +5,2,7 +3,8,13 +8,8,1 +3,14,7 +8,16,5 +3,7,9 +7,5,16 +12,14,3 +14,12,4 +4,2,9 +7,4,13 +17,6,7 +8,8,17 +13,16,6 +12,12,17 +5,8,15 +10,1,8 +9,10,2 +5,15,8 +12,2,7 +14,16,11 +4,6,13 +18,10,11 +15,12,5 +13,14,14 +5,3,8 +4,7,12 +13,18,10 +3,8,11 +7,12,16 +4,13,4 +5,3,7 +12,5,14 +10,2,12 +12,9,3 +10,13,3 +15,8,15 +4,8,15 +13,2,9 +14,17,7 +18,10,12 +12,5,5 +15,3,7 +8,3,14 +10,15,4 +11,7,4 +1,10,13 +6,6,4 +5,10,3 +18,11,11 +4,6,3 +7,5,15 +8,3,13 +8,10,3 +7,4,5 +8,17,10 +11,5,12 +4,5,16 +6,9,4 +15,7,3 +18,11,10 +9,6,17 +16,11,14 +7,8,17 +14,6,15 +13,12,16 +6,5,5 +6,9,15 +13,13,16 +16,13,7 +14,2,6 +16,5,7 +11,10,1 +18,8,11 +2,8,11 +17,14,11 +3,10,12 +13,7,17 +10,7,18 +5,10,17 +17,9,14 +5,7,16 +12,4,14 +9,13,16 +17,9,11 +1,9,13 +2,6,7 +13,15,16 +15,5,14 +12,16,8 +15,10,16 +7,7,16 +11,15,16 +16,10,12 +6,3,13 +2,12,11 +12,16,6 +11,5,4 +10,12,17 +17,6,15 +2,6,12 +12,7,5 +8,3,10 +12,5,16 +6,17,13 +14,4,4 +9,18,8 +5,16,13 +2,11,6 +6,16,7 +8,4,14 +11,12,2 +6,4,5 +14,8,4 +6,1,10 +12,4,16 +9,4,3 +18,8,10 +16,15,10 +5,9,16 +17,10,9 +17,7,9 +7,7,4 +3,10,5 +6,13,15 +11,16,10 +6,6,15 +9,14,17 +4,8,6 +4,4,12 +9,3,3 +7,16,12 +10,14,16 +4,15,6 +16,4,7 +8,6,2 +8,6,17 +16,13,13 +15,15,7 +18,8,8 +12,13,4 +14,13,4 +5,12,4 +15,12,15 +4,4,15 +5,8,17 +17,11,14 +13,16,13 +5,7,7 +8,13,16 +8,5,14 +16,15,8 +6,1,9 +11,18,7 +11,5,2 +9,4,4 +9,13,2 +7,17,7 +6,7,2 +17,10,6 +14,8,2 +7,16,6 +17,9,10 +16,14,6 +7,16,10 +7,3,10 +16,11,13 +6,13,16 +3,8,4 +12,15,5 +17,6,12 +18,9,11 +14,13,5 +15,8,16 +13,14,15 +17,8,13 +5,14,3 +8,13,17 +14,15,9 +8,14,16 +11,12,18 +15,5,10 +10,14,15 +14,7,15 +13,6,3 +3,14,9 +15,17,11 +1,12,9 +11,15,14 +6,16,6 +12,9,14 +11,18,10 +10,13,4 +13,17,11 +5,13,6 +10,1,7 +15,12,6 +12,12,15 +4,6,6 +3,5,13 +11,17,10 +5,14,8 +5,3,10 +13,13,17 +5,13,5 +15,5,12 +5,6,4 +12,15,14 +16,12,12 +12,17,10 +10,13,17 +8,13,1 +15,10,9 +17,13,9 +10,11,16 +8,12,17 +1,13,8 +13,8,3 +5,10,5 +14,5,15 +7,16,8 +7,9,15 +11,17,14 +12,17,11 +7,17,8 +13,10,17 +4,11,15 +3,11,8 +5,5,15 +11,9,18 +3,13,5 +11,14,4 +10,16,12 +7,3,4 +4,7,16 +8,15,16 +2,6,9 +2,13,7 +13,14,3 +6,9,18 +9,7,16 +13,15,13 +7,2,13 +5,11,4 +6,15,14 +18,11,8 +5,6,16 +12,17,5 +9,8,18 +7,4,11 +13,3,7 +7,11,18 +12,3,5 +15,12,4 +6,7,4 +14,13,12 +15,5,15 +9,17,10 +3,15,10 +17,10,11 +9,3,10 +9,13,15 +5,9,4 +16,9,7 +4,11,4 +5,15,16 +17,7,12 +12,6,3 +15,11,4 +13,6,5 +9,3,7 +8,8,18 +13,7,16 +13,16,12 +15,14,7 +6,6,2 +15,9,16 +5,4,6 +2,8,7 +13,17,12 +5,13,4 +11,15,15 +11,2,7 +16,11,9 +6,7,5 +9,9,17 +8,10,1 +9,14,3 +11,5,5 +14,9,5 +5,6,3 +10,2,11 +7,11,15 +16,14,10 +8,1,11 +16,6,13 +12,3,10 +12,4,10 +4,3,10 +9,11,2 +3,13,6 +5,16,7 +11,11,15 +7,17,10 +16,14,11 +16,14,12 +2,5,8 +3,6,10 +10,8,18 +7,4,6 +6,12,3 +15,15,6 +7,3,12 +9,1,9 +5,11,2 +15,5,6 +11,1,12 +17,9,8 +10,18,10 +2,7,11 +6,9,17 +6,12,4 +16,8,11 +15,5,13 +3,10,8 +16,11,12 +8,3,7 +7,2,10 +4,11,5 +16,13,6 +2,11,12 +4,15,9 +7,16,5 +3,11,12 +14,16,9 +2,10,13 +5,12,5 +16,6,11 +5,7,3 +13,11,3 +5,3,11 +14,14,7 +6,5,16 +5,11,17 +11,3,3 +9,10,18 +14,11,15 +12,5,15 +7,4,15 +16,10,10 +8,2,9 +14,6,17 +10,3,3 +5,14,11 +11,12,16 +14,5,9 +10,9,1 +10,3,10 +2,9,10 +7,3,6 +12,6,15 +9,18,9 +3,8,15 +3,4,11 +13,17,13 +5,5,14 +6,11,16 +5,4,9 +7,13,17 +14,6,3 +1,11,6 +5,11,14 +14,15,7 +3,11,14 +7,11,1 +16,8,12 +2,9,14 +13,5,2 +8,2,12 +4,4,11 +13,12,6 +8,6,15 +13,8,1 +17,12,6 +13,5,12 +16,9,8 +6,12,16 +13,7,1 +7,17,12 +5,13,7 +14,7,5 +10,2,7 +11,14,5 +11,16,11 +2,11,7 +9,18,7 +13,15,14 +8,2,14 +15,12,16 +10,7,2 +5,15,6 +7,13,3 +4,5,5 +18,11,9 +7,9,3 +0,10,10 +10,10,17 +16,10,11 +7,9,2 +3,7,8 +9,16,13 +11,13,3 +13,10,3 +9,5,17 +14,8,17 +11,1,8 +16,9,9 +15,6,13 +11,11,2 +10,16,11 +1,11,9 +0,11,9 +15,6,10 +1,5,10 +8,18,11 +7,15,15 +5,17,9 +5,5,4 +10,14,17 +9,6,14 +2,14,9 +6,16,10 +17,14,10 +10,2,5 +6,8,4 +9,18,12 +4,13,12 +4,5,6 +16,6,14 +3,9,11 +16,4,10 +13,5,14 +9,16,8 +14,4,14 +13,14,5 +5,5,6 +7,19,10 +7,6,16 +6,16,9 +8,13,2 +4,12,3 +17,7,8 +4,9,13 +3,5,6 +10,14,3 +4,14,9 +5,4,11 +5,2,9 +10,17,5 +5,10,15 +2,7,8 +3,5,5 +6,17,12 +9,16,11 +16,8,15 +3,5,11 +2,10,9 +9,9,2 +6,6,16 +13,14,12 +10,8,3 +11,6,16 +5,8,3 +3,6,8 +16,8,14 +11,3,4 +11,1,10 +6,12,2 +8,1,6 +5,6,15 +6,14,5 +17,15,10 +7,16,13 +11,2,5 +11,17,5 +15,13,7 +15,15,10 +5,11,16 +12,3,12 +2,12,8 +9,1,6 +11,5,14 +17,8,5 +7,14,15 +17,13,12 +9,15,14 +16,11,6 +8,11,2 +4,16,10 +14,17,9 +4,14,8 +9,18,11 +9,16,14 +10,15,12 +15,13,13 +17,9,7 +13,14,13 +1,12,11 +13,13,15 +13,15,8 +9,16,5 +11,12,17 +16,2,10 +17,12,12 +14,16,12 +10,17,12 +2,14,7 +7,10,2 +4,4,10 +6,16,4 +12,3,8 +6,7,3 +14,3,12 +13,2,10 +13,8,18 +4,5,7 +12,17,14 +14,11,14 +13,18,9 +9,11,1 +6,14,8 +11,8,2 +4,10,16 +16,13,11 +13,8,4 +10,6,17 +14,5,8 +6,8,16 +14,3,5 +14,16,7 +16,11,7 +13,4,11 +2,6,11 +2,10,7 +14,10,6 +10,11,2 +4,12,4 +16,13,8 +15,7,15 +4,9,3 +1,9,9 +16,5,10 +15,11,14 +14,13,14 +7,18,11 +7,3,15 +12,6,4 +16,7,15 +18,13,11 +9,4,15 +2,5,11 +9,2,9 +10,16,14 +11,2,8 +15,8,13 +3,10,6 +17,9,12 +3,10,9 +16,11,15 +11,5,17 +17,8,9 +5,4,10 +16,12,15 +12,2,11 +8,14,13 +14,4,12 +13,4,14 +15,8,6 +7,10,17 +17,12,8 +12,15,6 +3,7,7 +15,9,14 +3,5,10 +6,5,4 +10,8,2 +10,15,15 +7,1,7 +2,7,9 +18,7,9 +12,6,17 +6,16,12 +9,17,11 +6,6,3 +8,1,10 +6,16,5 +4,2,10 +3,10,4 +1,11,11 +5,11,10 +14,13,3 +8,7,2 +2,5,12 +3,11,10 +4,12,13 +4,6,11 +5,3,12 +12,16,11 +2,9,6 +7,2,12 +8,15,3 +3,12,12 +4,15,12 +6,7,16 +4,2,8 +15,7,16 +3,8,8 +13,17,6 +17,9,9 +3,12,14 +9,5,3 +8,8,3 +3,6,9 +11,7,17 +13,11,2 +7,12,3 +13,5,5 +15,10,5 +13,9,2 +9,6,15 +15,14,10 +8,18,6 +5,6,14 +9,14,14 +3,11,11 +9,11,3 +7,7,2 +16,9,10 +12,13,17 +11,3,10 +12,10,3 +16,5,14 +7,9,17 +4,10,13 +8,6,1 +12,15,15 +4,12,12 +3,12,7 +11,10,15 +8,5,18 +7,4,3 +16,12,10 +16,7,8 +12,1,9 +1,11,10 +16,8,9 +6,10,15 +16,12,5 +8,12,16 +14,13,7 +9,4,6 +17,9,6 +14,15,11 +13,11,16 +6,15,7 +2,7,12 +16,15,11 +11,2,13 +12,17,13 +4,13,11 +7,11,3 +9,4,5 +15,16,8 +2,14,11 +4,14,5 +14,6,4 +11,17,9 +5,6,12 +3,11,15 +4,3,9 +12,4,5 +4,12,16 +5,5,5 +8,13,15 +13,3,5 +6,10,3 +18,7,12 +15,8,4 +4,5,13 +5,8,16 +13,14,6 +17,5,9 +5,10,16 +12,18,8 +8,2,11 +13,2,7 +6,2,9 +11,4,15 +4,12,6 +13,5,3 +6,2,12 +11,4,4 +15,10,15 +3,7,5 +15,4,9 +3,11,7 +5,15,7 +5,14,5 +12,17,6 +16,6,10 +12,4,12 +14,11,5 +9,10,17 +13,16,11 +8,7,16 +10,17,4 +2,11,9 +18,9,7 +7,16,15 +2,10,14 +18,8,7 +17,11,9 +5,14,6 +8,3,11 +4,7,14 +2,9,11 +13,15,4 +8,17,6 +7,10,3 +9,9,15 +6,14,17 +2,5,10 +12,13,3 +3,15,7 +16,8,8 +8,3,5 +4,4,13 +12,15,13 +18,12,10 +9,3,14 +4,15,13 +13,15,5 +14,12,6 +16,11,11 +15,6,9 +7,6,17 +17,11,12 +6,18,8 +13,3,13 +13,2,6 +15,14,12 +12,15,3 +2,12,5 +3,4,9 +5,13,15 +14,15,5 +9,7,1 +2,9,7 +10,17,8 +4,7,4 +14,14,4 +11,15,6 +6,9,2 +12,12,3 +14,7,4 +10,6,1 +15,13,14 +11,3,13 +5,4,12 +15,6,4 +9,1,11 +15,17,8 +5,14,10 +11,14,16 +16,8,13 +16,10,13 +9,3,5 +14,12,14 +12,8,2 +3,7,13 +15,4,8 +2,14,5 +10,7,15 +6,12,13 +7,8,3 +10,15,5 +5,15,12 +8,14,5 +1,8,10 +8,16,7 +9,2,4 +15,5,7 +5,15,11 +14,4,13 +10,18,13 +13,12,5 +5,12,12 +4,5,14 +17,8,14 +12,11,2 +14,3,10 +13,7,5 +6,14,13 +3,10,15 +16,7,5 +10,15,14 +6,3,6 +12,17,12 +13,2,11 +15,4,5 +2,7,7 +12,16,12 +9,8,17 +17,11,10 +4,10,14 +12,12,2 +4,6,7 +14,5,12 +3,6,13 +14,8,14 +2,7,10 +16,9,11 +11,1,11 +9,4,16 +8,16,8 +10,2,6 +11,13,17 +6,14,14 +15,14,9 +4,12,10 +8,7,15 +3,6,6 +4,3,8 +13,5,10 +7,7,3 +4,16,9 +5,7,6 +5,12,14 +14,16,6 +16,11,5 +9,4,9 +1,7,13 +9,3,16 +11,3,11 +15,14,14 +4,14,11 +3,13,13 +18,9,9 +9,0,9 +2,6,8 +12,12,1 +17,12,14 +16,14,15 +3,12,4 +12,4,11 +14,15,6 +7,6,2 +10,14,4 +8,12,2 +12,8,17 +5,12,6 +9,3,8 +16,7,6 +6,11,15 +13,9,16 +11,4,16 +16,11,8 +12,15,8 +1,7,11 +5,9,5 +11,2,6 +8,18,9 +8,3,15 +10,17,11 +18,11,12 +14,4,8 +13,14,11 +13,5,7 +11,14,14 +4,15,8 +12,13,6 +12,12,18 +15,6,14 +5,5,13 +15,16,11 +9,7,17 +4,10,15 +14,15,14 +6,15,6 +9,15,3 +12,7,2 +11,16,14 +5,7,15 +17,8,12 +4,5,11 +13,6,7 +5,2,10 +14,3,8 +4,6,5 +17,11,11 +3,14,10 +6,3,9 +14,7,3 +10,5,2 +13,5,16 +15,16,13 +17,6,11 +8,17,15 +13,6,14 +18,7,10 +4,14,14 +13,14,4 +8,17,14 +17,12,9 +10,15,6 +16,9,15 +16,13,5 +11,17,11 +15,5,16 +4,15,10 +9,3,15 +4,8,14 +5,14,9 +11,8,18 +15,10,14 +12,14,14 +4,8,10 +11,7,2 +5,4,7 +15,15,12 +7,8,15 +10,6,16 +7,16,9 +14,4,9 +6,16,8 +8,12,3 +13,3,14 +4,7,3 +13,11,18 +17,10,7 +2,14,10 +5,9,15 +11,4,13 +2,9,9 +10,8,1 +12,15,12 +4,13,14 +8,9,0 +11,18,8 +11,17,12 +3,6,11 +4,13,15 +17,12,10 +11,2,9 +15,3,8 +7,5,14 +2,12,10 +11,7,18 +12,13,15 +12,7,1 +3,13,15 +16,9,13 +3,3,9 +10,7,0 +4,12,5 +17,10,10 +13,13,14 +10,11,18 +7,3,9 +15,15,13 +3,11,4 +15,7,13 +9,4,14 +1,9,7 +15,9,17 +8,11,16 +2,10,6 +4,11,3 +13,15,7 +10,1,11 +10,17,6 +5,13,3 +1,11,7 +11,13,16 +16,10,15 +8,2,6 +10,10,3 +11,2,4 +5,14,12 +7,15,13 +9,3,6 +7,15,4 +7,8,4 +10,13,16 +13,3,8 +1,10,9 +15,10,4 +13,6,2 +14,6,11 +7,13,16 +2,11,13 +3,6,12 +17,10,12 +3,9,13 +5,4,14 +10,4,3 +10,3,5 +9,16,7 +2,12,6 +17,6,9 +9,14,16 +11,13,4 +9,10,16 +7,2,11 +8,2,8 +3,14,5 +14,9,14 +1,6,10 +15,10,2 +14,12,5 +6,14,4 +3,7,11 +5,7,4 +8,17,5 +10,5,5 +14,14,11 +14,5,4 +6,4,7 +14,15,8 +12,5,6 +19,8,11 +11,14,2 +9,2,5 +7,1,9 +15,7,12 +8,9,1 +14,4,11 +8,14,15 +18,12,8 +11,16,5 +13,12,15 +16,12,13 +6,15,10 +15,4,14 +7,6,4 +7,2,14 +5,15,9 +8,19,10 +10,6,2 +16,15,9 +8,5,1 +5,4,15 +16,3,8 +4,4,5 +9,13,17 +5,14,7 +14,10,2 +5,15,5 +11,2,10 +3,12,9 +7,9,1 +12,16,3 +8,15,14 +6,5,15 +15,10,8 +17,7,11 +9,16,9 +15,13,15 +8,9,2 +5,12,8 +14,13,16 +6,15,4 +15,7,5 +11,12,3 +16,4,11 +11,9,2 +3,9,9 +1,11,12 +7,11,17 +11,3,12 +8,5,17 +14,5,7 +5,2,14 +13,10,16 +7,2,8 +17,8,11 +12,12,16 +12,1,13 +8,5,2 +16,5,12 +11,9,16 +2,13,8 +13,12,1 +8,16,4 +17,6,6 +15,7,6 +8,16,15 +18,7,8 +13,6,15 +7,2,6 +5,14,15 +8,14,3 +14,12,3 +11,9,19 +4,17,11 +16,14,5 +13,12,4 +18,10,7 +9,10,1 +10,1,9 +3,9,16 +9,12,17 +6,5,3 +11,17,8 +14,7,16 +10,15,3 +3,12,8 +14,12,17 +7,16,14 +3,15,11 +12,16,13 +9,11,0 +5,7,13 +1,8,13 +11,15,13 +16,12,14 +16,12,11 +9,18,10 +16,13,9 +12,6,2 +8,16,12 +15,11,3 +7,9,18 +6,8,5 +13,16,5 +9,8,2 +2,8,4 +4,14,10 +17,12,7 +17,7,7 +17,13,10 +6,13,10 +14,10,5 +16,3,12 +6,7,15 +10,4,13 +17,6,8 +9,11,19 +16,7,10 +9,6,2 +7,14,14 +11,18,9 +15,7,14 +3,16,9 +12,16,10 +6,16,14 +14,6,10 +14,3,9 +4,5,4 +13,5,13 +12,7,15 +12,3,4 +15,8,3 +7,8,18 +14,2,12 +14,14,8 +4,14,7 +8,7,1 +2,4,10 +8,4,7 +15,7,17 +11,16,8 +14,9,17 +18,12,9 +8,15,15 +10,2,14 +11,4,14 +11,16,15 +4,12,7 +12,4,15 +9,7,3 +10,4,14 +14,5,16 +14,7,17 +5,16,11 +15,3,13 +10,5,17 +8,3,12 +5,11,15 +2,7,5 +3,8,6 +8,17,7 +13,3,9 +8,4,16 +9,2,8 +7,10,16 +11,6,4 +6,15,13 +14,8,7 +6,2,11 +15,14,15 +14,14,6 +7,8,1 +2,8,9 +13,4,6 +14,9,12 +14,6,16 +13,3,6 +4,13,5 +14,2,8 +15,15,9 +8,11,18 +7,15,5 +10,11,3 +17,14,8 +8,18,7 +7,13,2 +13,10,1 +2,14,8 +10,11,0 +6,3,12 +3,11,9 +2,6,6 +16,9,16 +11,18,14 +7,15,16 +10,16,4 +8,17,11 +13,13,5 +10,10,18 +10,16,5 +10,14,5 +12,3,3 +1,9,8 +3,5,9 +7,4,4 +13,3,11 +9,2,10 +8,4,11 +13,9,4 +6,4,4 +1,10,6 +12,10,2 +7,16,11 +7,17,5 +2,11,4 +4,11,6 +8,2,5 +13,3,15 +6,2,7 +6,17,11 +10,5,3 +6,15,9 +11,3,9 +13,14,16 +13,4,9 +17,10,13 +12,2,10 +6,17,10 +7,1,8 +4,7,6 +10,3,6 +14,10,16 +2,12,12 +4,8,5 +8,2,7 +9,4,10 +14,11,17 +6,4,12 +15,10,7 +16,6,7 +2,11,10 +11,6,3 +4,11,8 +11,17,6 +11,16,9 +4,5,12 +2,7,4 +3,14,13 +3,13,10 +13,4,13 +6,9,16 +11,7,3 +13,2,13 +9,13,4 +16,10,3 +12,8,16 +8,16,6 +16,6,12 +1,10,7 +16,10,7 +6,9,1 +11,13,15 +6,13,2 +15,9,15 +5,4,3 +16,15,12 +6,15,11 +10,2,13 +5,6,5 +17,13,6 +8,5,3 +2,7,6 +12,2,13 +12,9,18 +5,17,8 +7,9,16 +13,1,8 +5,3,6 +6,3,11 +11,1,7 +12,4,4 +14,7,2 +17,7,14 +8,1,13 +18,7,7 +10,18,8 +17,12,11 +4,10,8 +18,8,12 +1,9,10 +9,8,3 +12,11,17 +4,11,13 +7,18,8 +3,12,13 +15,13,11 +2,12,15 +3,4,6 +1,10,8 +16,6,5 +15,13,16 +14,5,6 +15,13,4 +9,19,8 +6,18,13 +4,9,15 +7,16,7 +12,8,18 +10,16,6 +12,5,13 +14,5,5 +8,5,4 +9,4,2 +17,12,13 +9,12,4 +12,7,4 +11,17,13 +13,4,15 +3,4,8 +14,7,11 +4,10,2 +13,12,13 +15,3,12 +13,10,14 +4,7,5 +5,9,2 +13,9,6 +6,2,6 +9,6,1 +3,3,10 +18,9,8 +4,15,14 +13,11,4 +14,16,14 +8,1,5 +14,13,13 +4,9,2 +9,16,10 +14,12,15 +9,14,15 +6,4,15 +12,5,7 +3,9,6 +15,14,5 +7,1,11 +15,11,5 +11,3,8 +10,9,17 +9,12,2 +5,8,5 +6,17,7 +12,7,3 +10,12,16 +2,11,14 +1,7,10 +4,8,9 +16,16,12 +2,9,5 +13,8,17 +2,8,12 +4,3,13 +16,8,4 +5,16,6 +15,5,9 +7,14,17 +13,13,4 +5,14,4 +12,3,9 +12,11,1 +11,3,14 +6,12,6 +16,9,12 +11,8,6 +9,9,3 +18,6,12 +10,5,4 +9,14,10 +13,4,8 +13,8,16 +4,13,8 +7,17,14 +10,6,18 +16,3,9 +4,11,10 +6,5,2 +14,15,15 +4,3,12 +3,16,10 +8,7,3 +3,13,12 +6,13,5 +9,17,5 +9,16,16 +11,8,17 +2,8,5 +9,6,18 +9,5,5 +16,12,8 +12,15,16 +4,14,13 +7,11,16 +15,14,13 +14,8,5 +12,11,3 +8,8,4 +14,13,8 +13,8,13 +14,14,5 +10,15,13 +14,5,13 +12,10,4 +10,12,3 +8,13,14 +0,8,9 +2,13,11 +1,12,6 +15,13,8 +9,16,15 +3,7,4 +12,10,18 +4,11,14 +10,9,2 +4,12,15 +15,12,10 +14,7,14 +3,10,7 +17,14,5 +2,11,5 +15,3,9 +4,15,5 +12,11,18 +5,1,10 +6,12,14 +4,16,8 +11,15,2 +1,9,12 +3,10,16 +10,10,16 +8,16,14 +17,7,13 +11,14,17 +5,5,3 +16,7,9 +3,14,14 +15,13,12 +13,4,12 +10,9,3 +4,9,16 +15,13,6 +7,3,5 +15,11,7 +7,4,16 +8,4,8 +4,5,3 +12,16,15 +2,12,13 +18,9,12 +11,11,3 +14,2,10 +8,14,2 +9,9,19 +16,10,6 +2,8,14 +5,6,13 +7,5,6 +14,5,10 +13,10,15 +7,7,18 +17,11,8 +12,15,9 +8,10,2 +8,18,8 +15,8,12 +7,15,11 +12,11,4 +7,13,5 +17,11,4 +2,5,9 +9,8,1 +6,15,16 +5,7,5 +12,6,5 +9,17,14 +11,11,18 +9,15,4 +10,17,9 +8,16,10 +17,11,5 +13,8,15 +18,11,13 +3,13,14 +11,11,1 +13,16,7 +15,16,12 +5,5,9 +3,12,15 +3,14,11 +2,7,14 +11,4,5 +6,6,7 +12,1,10 +3,9,4 +13,17,10 +4,17,12 +5,6,2 +13,4,10 +7,15,3 +15,11,12 +4,13,16 +9,12,15 +6,2,14 +3,7,12 +15,9,5 +13,5,6 +10,17,14 +6,15,8 +10,1,13 +17,12,4 +6,3,8 +6,5,7 +14,14,13 +17,15,11 +12,10,16 +18,8,6 +12,10,15 +17,13,14 +11,5,13 +10,3,7 +15,15,8 +12,9,1 +6,11,2 +4,14,6 +10,15,17 +7,18,6 +12,8,5 +6,11,11 +13,16,10 +6,10,18 +16,6,4 +11,6,1 +16,15,7 +6,5,13 +7,5,17 +6,17,9 +8,15,13 +12,1,11 +12,14,17 +9,2,14 +1,6,8 +9,8,16 +13,7,14 +4,14,4 +12,11,15 +1,12,7 +3,9,12 +14,7,6 +10,2,9 +10,16,8 +6,11,4 +18,9,13 +4,8,16 +4,9,17 +14,11,4 +15,16,7 +18,10,10 +18,10,13 +17,5,11 +10,13,18 +4,9,14 +5,4,4 +9,4,17 +1,10,12 +3,15,13 \ No newline at end of file diff --git a/data/advent18a.txt b/data/advent18a.txt new file mode 100644 index 0000000..d18bf98 --- /dev/null +++ b/data/advent18a.txt @@ -0,0 +1,13 @@ +2,2,2 +1,2,2 +3,2,2 +2,1,2 +2,3,2 +2,2,1 +2,2,3 +2,2,4 +2,2,6 +1,2,5 +3,2,5 +2,1,5 +2,3,5 \ No newline at end of file diff --git a/problems/day18.html b/problems/day18.html new file mode 100644 index 0000000..04858e9 --- /dev/null +++ b/problems/day18.html @@ -0,0 +1,147 @@ + + + + +Day 18 - Advent of Code 2022 + + + + + + + + +

Advent of Code

Neil Smith (AoC++) 36*

 {'year':2022}

+ + + +
+

--- Day 18: Boiling Boulders ---

You and the elephants finally reach fresh air. You've emerged near the base of a large volcano that seems to be actively erupting! Fortunately, the lava seems to be flowing away from you and toward the ocean.

+

Bits of lava are still being ejected toward you, so you're sheltering in the cavern exit a little longer. Outside the cave, you can see the lava landing in a pond and hear it loudly hissing as it solidifies.

+

Depending on the specific compounds in the lava and speed at which it cools, it might be forming obsidian! The cooling rate should be based on the surface area of the lava droplets, so you take a quick scan of a droplet as it flies past you (your puzzle input).

+

Because of how quickly the lava is moving, the scan isn't very good; its resolution is quite low and, as a result, it approximates the shape of the lava droplet with 1x1x1 cubes on a 3D grid, each given as its x,y,z position.

+

To approximate the surface area, count the number of sides of each cube that are not immediately connected to another cube. So, if your scan were only two adjacent cubes like 1,1,1 and 2,1,1, each cube would have a single side covered and five sides exposed, a total surface area of 10 sides.

+

Here's a larger example:

+
2,2,2
+1,2,2
+3,2,2
+2,1,2
+2,3,2
+2,2,1
+2,2,3
+2,2,4
+2,2,6
+1,2,5
+3,2,5
+2,1,5
+2,3,5
+
+

In the above example, after counting up all the sides that aren't connected to another cube, the total surface area is 64.

+

What is the surface area of your scanned lava droplet?

+
+

Your puzzle answer was 3364.

--- Part Two ---

Something seems off about your calculation. The cooling rate depends on exterior surface area, but your calculation also included the surface area of air pockets trapped in the lava droplet.

+

Instead, consider only cube sides that could be reached by the water and steam as the lava droplet tumbles into the pond. The steam will expand to reach as much as possible, completely displacing any air on the outside of the lava droplet but never expanding diagonally.

+

In the larger example above, exactly one cube of air is trapped within the lava droplet (at 2,2,5), so the exterior surface area of the lava droplet is 58.

+

What is the exterior surface area of your scanned lava droplet?

+
+

Your puzzle answer was 2006.

Both parts of this puzzle are complete! They provide two gold stars: **

+

At this point, you should return to your Advent calendar and try another puzzle.

+

If you still want to see it, you can get your puzzle input.

+

You can also this puzzle.

+
+ + + + + + \ No newline at end of file