From 68043122bb8c2cc485dfa18d26e547ad73730a2e Mon Sep 17 00:00:00 2001 From: Neil Smith <neil.git@njae.me.uk> Date: Tue, 8 Dec 2020 10:41:54 +0000 Subject: [PATCH] Done day 3 --- advent02/src/advent02.hs | 4 +- advent03/package.yaml | 59 +++++++ advent03/src/advent03.hs | 46 ++++++ data/advent03.txt | 323 +++++++++++++++++++++++++++++++++++++++ data/advent03a.txt | 11 ++ problems/day03.html | 177 +++++++++++++++++++++ stack.yaml | 1 + 7 files changed, 618 insertions(+), 3 deletions(-) create mode 100644 advent03/package.yaml create mode 100644 advent03/src/advent03.hs create mode 100644 data/advent03.txt create mode 100644 data/advent03a.txt create mode 100644 problems/day03.html diff --git a/advent02/src/advent02.hs b/advent02/src/advent02.hs index 27886d0..ce0eeb7 100644 --- a/advent02/src/advent02.hs +++ b/advent02/src/advent02.hs @@ -23,7 +23,6 @@ main = let policies = successfulParse text print $ part1 policies print $ part2 policies - -- print $ head $ part2 nums part1 = length . filter inRange where nCharsPresent p = length $ filter (== (character p)) (password p) @@ -56,9 +55,8 @@ passwordP = some alphaNumChar <* sc policiesP = many policyP policyP = Policy <$> integerP <* hyphenP <*> integerP <*> characterP <* colonP <*> passwordP --- policyP = (,,,) <$> integerP <* hyphenP <*> integerP <*> characterP <* colonP <*> passwordP --- successfulParse :: Text -> [Policy] +successfulParse :: Text -> [Policy] successfulParse input = case parse policiesP "input" input of Left _err -> [] -- TIO.putStr $ T.pack $ parseErrorPretty err diff --git a/advent03/package.yaml b/advent03/package.yaml new file mode 100644 index 0000000..dc4d10d --- /dev/null +++ b/advent03/package.yaml @@ -0,0 +1,59 @@ +# This YAML file describes your package. Stack will automatically generate a +# Cabal file when you run `stack build`. See the hpack website for help with +# this file: <https://github.com/sol/hpack>. + +name: advent03 +synopsis: Advent of Code +version: '0.0.1' + +default-extensions: +- AllowAmbiguousTypes +- ApplicativeDo +- BangPatterns +- BlockArguments +- DataKinds +- DeriveFoldable +- DeriveFunctor +- DeriveGeneric +- DeriveTraversable +- EmptyCase +- FlexibleContexts +- FlexibleInstances +- FunctionalDependencies +- GADTs +- GeneralizedNewtypeDeriving +- ImplicitParams +- KindSignatures +- LambdaCase +- MonadComprehensions +- MonoLocalBinds +- MultiParamTypeClasses +- MultiWayIf +- NamedFieldPuns +- NegativeLiterals +- NumDecimals +# - OverloadedLists +- OverloadedStrings +- PartialTypeSignatures +- PatternGuards +- PatternSynonyms +- PolyKinds +- RankNTypes +- RecordWildCards +- ScopedTypeVariables +- TemplateHaskell +- TransformListComp +- TupleSections +- TypeApplications +- TypeFamilies +- TypeInType +- TypeOperators +- ViewPatterns + +executables: + advent03: + main: advent03.hs + source-dirs: src + dependencies: + - base >= 2 && < 6 + - containers diff --git a/advent03/src/advent03.hs b/advent03/src/advent03.hs new file mode 100644 index 0000000..777cf7e --- /dev/null +++ b/advent03/src/advent03.hs @@ -0,0 +1,46 @@ +-- import Debug.Trace + +import qualified Data.Set as S + +type Position = (Int, Int) +type Trees = S.Set Position + +main :: IO () +main = + do text <- readFile "data/advent03.txt" + let (trees, maxCorner) = readGrid text + -- print $ S.size trees + -- print trees + -- print $ maxCorner + -- print $ take 25 $ visitedPlaces (1, 3) maxCorner + -- print $ takeWhile (withinTrees maxCorner) $ visitedPlaces (1, 3) maxCorner + print $ part1 trees maxCorner + print $ part2 trees maxCorner + + +readGrid :: String -> (Trees, Position) +readGrid input = ( S.fromList [ (r, c) + | r <- [0..maxR], c <- [0..maxC] + , (grid!!r)!!c == '#'] + , (maxR, maxC) + ) + where grid = lines input + maxC = (length $ head grid) - 1 + maxR = (length grid) - 1 + + +part1 trees maxCorner = countEncounteredTrees trees maxCorner (1, 3) + +part2 trees maxCorner = foldr1 (*) $ map cet [(1, 1), (1, 3), (1, 5), (1, 7), (2, 1)] + where cet = countEncounteredTrees trees maxCorner + +countEncounteredTrees trees maxCorner delta = S.size $ S.intersection trees visited + where visited = S.fromList $ takeWhile (withinTrees maxCorner) $ visitedPlaces delta maxCorner + + +visitedPlaces :: Position -> Position -> [Position] +visitedPlaces (dr, dc) (_maxR, maxC) = iterate wrappingStep (0, 0) + where wrappingStep (r, c) = (r + dr, (c + dc) `mod` (maxC + 1)) + +withinTrees (maxR, maxC) (r, c) = r >= 0 && r <= maxR && c >= 0 && c <= maxC + diff --git a/data/advent03.txt b/data/advent03.txt new file mode 100644 index 0000000..d193cf2 --- /dev/null +++ b/data/advent03.txt @@ -0,0 +1,323 @@ +.#.#....##.......#..........#.. +...#...........##...#..#....... +#.####......##.#...#......#.#.. +##.....#.#.#..#.#............#. +##.....#....#.........#...##... +###..#.....#....#.............. +..........#..#.#..#.#....#..... +##.....#....#.#...#.##......... +#...#......#....##....#..#.#... +.##.##...#....##..#.#.....#...# +.....#.#..........##.#........# +.##..................#..#..##.# +#.#..........##....#.####...... +.#......#.#......#.........#... +#....#..##.##..##........#.#... +##..#.##..#...#..####.#..#..... +###....#.###.##...........##..# +.....#.##.....##.#..#####....## +....#.###....#..##....##...#... +..###.#...##.....#.##..#..#.#.. +#...#..#..#.........#..#....... +##..#.#.....#.#.#.......#...#.# +...#...##.#........#...#....... +..#..#.#..#...#...#...........# +........#.....#......#...##.... +#........##.##.#.#...#...#..... +####.......#.##.###.#....#..... +...#...........#...#......#...# +##...#...#............#.......# +....#...........##.......#..... +###......#.....#....#...#.#...# +.....##..........#.......#.#... +##.##.##...#......#....#....... +##..#.#..#......#...#..#....... +....#....##.##............####. +..#.###..#.##.###..#.##.......# +#.##..#.#.....#..#.....##...... +..##..#.....##.#.##........#... +.#..#.#......#..#............#. +.....#..#.#...#....#.##.#...... +.#...##.#..#.#...##...##..##... +###............#.#..#..#...#... +..#..##.####.#.....#.....##.### +#....#.##..##....#..#...#.##.#. +.....#.##.........##...##...... +.........####.#....#.#......#.# +.........#.#..#...#.#..#.#....# +.#.....#..##.##..##....#....... +..........##......#.##.###....# +.##...###..##.#...#........##.. +..............#.#....#.#.###.## +..##.##.......#.#......##...#.. +.#.....#..##..#.###...#..#.##.# +#.....#.#..#...#........#...#.. +.#......#....#.#.....###...#..# +..##.#....#..##......#.....#... +..#.#.##..#.....#.####..###.... +.........#......#..#........... +..#........#.##.#.....##.##..#. +.......#.........#....#...#.#.. +.##.....#.#....#.#.......#..... +..........#.##........##...##.. +###..###.#.#..#..#####.##.#.##. +..##..##.#.#...#..#.#.#......#. +#..#..#..#..##..#.....#......#. +..#....#.##..#......##......... +..#.##......#...##.#......#.... +.......#..#.##.#.....#......... +.......#.#.#.###...##......#... +.....#.#..........#..#...#..... +....##..........#..........##.. +..#......#.....#.##.#..#...#.#. +....#.....#..#...#..#.#.##..### +.####....#........#...#........ +...##.#.##.#..#...##...#.##.... +....#...#...#.#.#.#...#..#..... +.....#...#.#.....#.#........##. +..#.#.......###.#.....##....... +......#.........##....#....#..# +.............##.....##......... +.........##...##.......#.....#. +##.........#..........#.###..## +...#.....#......#....#..##..... +##..#...#...##.#.....#.#......# +..#...##.#.......#.#......#.##. +......#.......#.#...........#.. +..........#.....##............# +#........#...#..#.......###.##. +.##...........#.#........#.#.#. +...#..##...#.#....#####.#...... +.....##...###...#..#.##...####. +...#....#.....#..#.......#..... +#....#....#...#..#..#.######..# +#.###...........#......#...#..# +.#.#.#.#..#....#....#...##.#... +.#..#.........#.#....###...#... +......#..##.##..........#....## +.....#......##....##.....#...#. +.#...#.#.#....##....#..#....#.# +..................#..###.#..##. +..#.........#......#....#..###. +#.#.....#..#..#....###..###.... +..##..##.#..##........##...##.. +##..#........##..###..#.....#.# +..#..###..#......#....#...#...# +#..#.#..............##.#..#.#.. +.....####....#...####.....#.#.. +.....#....##.#......###........ +##.##...#.#.#.#.......#....##.. +.#......#...#.#....#..##.#.##.# +#.#.##.#.#......#..##........## +...##.....#.....#...#..###...#. +........###.....#.....#...##..# +.....#.##.##......#.#....#...#. +.#....##.......#..#.####....... +.#..#....#..........#......#.#. +.#.##.##.....###.#.#........... +.........#......#..##.......... +....#...##.#.#.#..#.#.........# +..#.....#.##...#..#..#.###....# +...#.##......#.....##....#..... +###............#.#....#...#.... +.......#.....#..#.#.#....#..#.# +...#......#.#..##..#....#...#.# +............##........##..##... +..#..#.##..#......###..#....... +........#.........#............ +..#...#.#########.#...##..###.. +#....#......#.......#.#.....#.. +#.#..#....###.###....#...#.#... +#...###.#.#.......#.##......#.. +.................#...#.#.#..... +##....#...#........#....#.#..#. +......#.....#...#..........#.#. +##..........#...#..........#.## +..#.#.##.#....#.#......#...##.. +.....#.......#..#.....#........ +#.##.#..##..#.......##......... +....#......#..#..#.#...#....... +...#....#................###... +.##.....#.#....#.#..........##. +...#..#....#.##.##......#...... +..#.#....#.......#.#..##....... +....#.....#..........##.#.##### +#.....................##..#..#. +.###..#.##.......##.#...#..#... +...###.......#..#...#......#..# +#..#...#.#..#.#..#..#.##....... +#...##.......#..#..#.##..###... +......#....#.#.#........#.##..# +..##..#....#....#..#.#..#...... +..##.#...#.#######..#...#.....# +..#....#..#.........#..##...... +...#....#.#......#..#..#.#..... +#..#....#........#.#..##....### +#....#..##......##.##.....#.### +...#.#..........#..#.#.#.#.##.. +......##..#.#..#.#....#....#... +##....#....#..#..#.##......#... +....#.#..##.#.#...###....##.#.. +...#.......##..#.......#...#... +......##.......#..##.....#...#. +...#.#...#...........#...#..... +.#....#...#......##.##..###..#. +.#..........#...#...#...##.##.. +.....###..#.....#..##....#.#### +..#.###..#..##..##.....#.#..... +.............#.###...##.#.....# +....###.......###.#.....#..#.#. +........##.#.........#.....###. +.....###.#..#.....#...#..#..... +.#....#..##.#..#.#....#.......# +........#......#.#..#.#..#...## +...#.##.##......#.............. +.#.....##.#.....#..#......##... +#..#..#.....#.....#.....###.... +.##...........#..#.##.....#.... +..#.#......#.#...#.##.#..#...## +...#..........#.....#.......... +#.#.#.#.#...#....#...#.....##.. +#......##...#...#..........#.#. +....##........#.#.............. +#..#.#.#..#........##......#.## +........####...##.#.....#...... +....#........#.#..#..##..#.#... +.#.....#..###...#..#.....#..#.. +#......###.#..#....#..#.#...... +....#.....##.##..#...#.#..##.#. +..##..#...#.#......#....#...#.# +#..##...##..#...###...#..#..... +.......#.....#...........##.... +#..##....#........#....##..#.#. +.#........#..##...###.#..#..... +.#.#....#..##...#...##.#..###.. +#.........#.......#.....#.#.... +#..#.....#.#.###.#..#......#... +....#..#.#....#..##..###....### +###.##.#.#..#...........#.#.#.. +..##.#.......#......#..##....#. +.....#.#.#.......##.......#...# +...........#.##....##.##....#.# +...#.......#..#.##..#......#..# +#.#.#...#......##.#...........# +##........#...........###.#..#. +..........#.#.#....#.#..##.#.#. +...#.#.#....#..........#..#.... +#.#....###.#.#..#.......###...# +.#....#......#.#.#..#..#....... +......##.............#....#.#.# +.#..........#.........#.##..... +##....#....##....#..#.......#.. +#.##.##.#..#..#.....#..#.##.#.. +.#..#.......##..#.....##.##.... +.......#..........#.#.##..#.##. +....#.....#.#...##....##....... +.......#.........#...##....##.# +#.....#......#..........#...#.. +...#.#.......#.#..#....###..#.. +.....#.#.#.........#........... +.#..###.#.#........#.#......... +.........#..#......##...##....# +...###..#.....##.....#.###....# +.##...#...#........###.#..#.... +.##........#..#.###.######.##.# +##.#...#.#....#..##.#....##.... +.......##.....##.#..###.#...... +..##...##........#.......#....# +#..##...#.####...###......#...# +.##.....#.##.#.#.....###.#..##. +..###....#.#.###.#....#........ +....#..###..#...#....#..#..#.#. +#.#.##....##...##.......#...... +.........#...#....#..#......... +.............#...#..##.#....... +...#.##.......#...#.#..##.##... +.####.#.##..#.#......#.##...#.# +.#..#.#.....#.................# +..#.##..###....#...#......####. +..##..##...........#....#...#.. +....#...#...#...#.......#....#. +#.#...###...#...#.#...#....##.# +......#...#.#.......#.....#...# +....##...#.#.#....#....#.#....# +.....#.....#...##..#...#....##. +#.....#....#......##.##....#... +...#.#....#...#....#.#....##..# +...#.#..#...##....###..#....... +...##......###...###.#...#..#.. +##.......#.......###.......#..# +..##.##..###.#............#...# +#.....##..#..##....##..#....... +......#.#...#......#.....#..... +#...........#....#..##.##.#.... +.......#..#......#...#....#...# +.#...##...........#......#...#. +#........#....##...###.#....#.. +.....#.......##.........#.##... +.#.###..#....#..##.#..#.#..#... +#.......#.##.#.#....#.#..#....# +###.....#.#.......#..#......#.# +#..#.#.......#.#..##..##.#.#... +#..#.#.#.###........#.....#...# +#.#.#..#..##.....#...........#. +..#.#..#.....#...#...#...##.... +...#.##......#...##.#...#.#.#.# +#..#.#.#.#.......####.......... +..#......#.#......##.###.....## +..#...##..#.........##....#.##. +##.##.##.#.#.....#..........##. +.#.....###.#..#....#..#.###...# +#...##.......###....#.#..#..... +..#....##.........##.........## +......#....#.##.......#........ +..#.#.#..#...#...#...##.#...#.. +......#..##.#.#.#...##...#.#.## +#..#...##.#.....#...#.##....... +..#..#.........##.#...#.##...## +##.##.#....#.......#.##..#..... +.....##...##.##...##.........## +#......#...#.......#...#...#... +...##...........#...#..#....... +.#.##.#..#........#....#....... +#.#...#..#......##...#.#.##.... +##........####..#.#...#.#.##.## +#..#.#.##......##.#.#..#....... +.....#.........#..#.####....#.. +......##..#....#...#.#....#.... +#...##........#.........#.....# +.#.#...#.#.#..#............##.# +.#..#....#....#.....#...#.....# +..###...#..#.....#.##.###...#.# +.#.###..#..#...#.#...#.#......# +#...#####......###........##... +.....#.....#..#.#....#..##..... +....##...#.#.##.#####...#....#. +.#.#.........##.#.......#..##.. +.#...#.#...#...#....#.#...##.#. +.##...#..#.#..#......#.#.#..##. +..#.....#..#.....##.....#...... +..#........#..##...#.......###. +.#....#.......#....#....#..#... +....#......#.#.#.........#..... +..##...#.#.#...#.#........#.... +.#.....####...##.#..#...##..... +...#.....#...#...#....#....#... +.........#..#.#.....#..#.#..#.. +.........##...........#.......# +......#..#.....##...#.##.#..... +.#......##........##...#.#.##.. +.....#.#..##...........#..#..#. +...#.......#...#.#..#.##..#.##. +...#.......#.....#.#...#.##.#.. +#.....#.............##.#..####. +.#...#......#...##.#....#.#.... +.##..##.##....#.#.....#.......# +...#...#....#....##.#..#....##. +..............##....#.......#.# +.#.#.#...##..#..#...###.#..#... +.#.#...#.#..#.#..#...######..#. +........#......#.#..#.#....#... +..###.....###.#.##....#...##... +.##.#.....#.......##.......#... +..#..##...#..........#.#....#.# diff --git a/data/advent03a.txt b/data/advent03a.txt new file mode 100644 index 0000000..7e88cdc --- /dev/null +++ b/data/advent03a.txt @@ -0,0 +1,11 @@ +..##....... +#...#...#.. +.#....#..#. +..#.#...#.# +.#...##..#. +..#.##..... +.#.#.#....# +.#........# +#.##...#... +#...##....# +.#..#...#.# diff --git a/problems/day03.html b/problems/day03.html new file mode 100644 index 0000000..ad12ea8 --- /dev/null +++ b/problems/day03.html @@ -0,0 +1,177 @@ +<!DOCTYPE html> +<html lang="en-us"> +<head> +<meta charset="utf-8"/> +<title>Day 3 - Advent of Code 2020</title> +<!--[if lt IE 9]><script src="/static/html5.js"></script><![endif]--> +<link href='//fonts.googleapis.com/css?family=Source+Code+Pro:300&subset=latin,latin-ext' rel='stylesheet' type='text/css'/> +<link rel="stylesheet" type="text/css" href="/static/style.css?25"/> +<link rel="stylesheet alternate" type="text/css" href="/static/highcontrast.css?0" title="High Contrast"/> +<link rel="shortcut icon" href="/favicon.png"/> +</head><!-- + + + + +Oh, hello! Funny seeing you here. + +I appreciate your enthusiasm, but you aren't going to find much down here. +There certainly aren't clues to any of the puzzles. The best surprises don't +even appear in the source until you unlock them for real. + +Please be careful with automated requests; I'm not a massive company, and I can +only take so much traffic. Please be considerate so that everyone gets to play. + +If you're curious about how Advent of Code works, it's running on some custom +Perl code. Other than a few integrations (auth, analytics, social media), I +built the whole thing myself, including the design, animations, prose, and all +of the puzzles. + +The puzzles are most of the work; preparing a new calendar and a new set of +puzzles each year takes all of my free time for 4-5 months. A lot of effort +went into building this thing - I hope you're enjoying playing it as much as I +enjoyed making it for you! + +If you'd like to hang out, I'm @ericwastl on Twitter. + +- Eric Wastl + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +--> +<body> +<header><div><h1 class="title-global"><a href="/">Advent of Code</a></h1><nav><ul><li><a href="/2020/about">[About]</a></li><li><a href="/2020/events">[Events]</a></li><li><a href="https://teespring.com/stores/advent-of-code" target="_blank">[Shop]</a></li><li><a href="/2020/settings">[Settings]</a></li><li><a href="/2020/auth/logout">[Log Out]</a></li></ul></nav><div class="user">Neil Smith <a href="/2020/support" class="supporter-badge" title="Advent of Code Supporter">(AoC++)</a> <span class="star-count">6*</span></div></div><div><h1 class="title-event"> <span class="title-event-wrap">y(</span><a href="/2020">2020</a><span class="title-event-wrap">)</span></h1><nav><ul><li><a href="/2020">[Calendar]</a></li><li><a href="/2020/support">[AoC++]</a></li><li><a href="/2020/sponsors">[Sponsors]</a></li><li><a href="/2020/leaderboard">[Leaderboard]</a></li><li><a href="/2020/stats">[Stats]</a></li></ul></nav></div></header> + +<div id="sidebar"> +<div id="sponsor"><div class="quiet">Our <a href="/2020/sponsors">sponsors</a> help make Advent of Code possible:</div><div class="sponsor"><a href="https://www.codethink.co.uk/" target="_blank" onclick="if(ga)ga('send','event','sponsor','sidebar',this.href);" rel="noopener">Codethink</a> - Codethink is a software services company, expert in the use of Open Source technologies for systems software engineering.</div></div> +</div><!--/sidebar--> + +<main> +<script>window.addEventListener('click', function(e,s,r){if(e.target.nodeName==='CODE'&&e.detail===3){s=window.getSelection();s.removeAllRanges();r=document.createRange();r.selectNodeContents(e.target);s.addRange(r);}});</script> +<article class="day-desc"><h2>--- Day 3: Toboggan Trajectory ---</h2><p>With the toboggan login problems resolved, you set off toward the airport. While travel by toboggan might be easy, it's certainly not safe: there's <span title="It looks like the toboggan steering system even runs on Intcode! Good thing you don't have to modify it.">very minimal steering</span> and the area is covered in trees. You'll need to see which angles will take you near the fewest trees.</p> +<p>Due to the local geology, trees in this area only grow on exact integer coordinates in a grid. You make a map (your puzzle input) of the open squares (<code>.</code>) and trees (<code>#</code>) you can see. For example:</p> +<pre><code>..##....... +#...#...#.. +.#....#..#. +..#.#...#.# +.#...##..#. +..#.##..... +.#.#.#....# +.#........# +#.##...#... +#...##....# +.#..#...#.# +</code></pre> +<p>These aren't the only trees, though; due to something you read about once involving arboreal genetics and biome stability, the same pattern repeats to the right many times:</p> +<pre><code><em>..##.......</em>..##.........##.........##.........##.........##....... ---> +<em>#...#...#..</em>#...#...#..#...#...#..#...#...#..#...#...#..#...#...#.. +<em>.#....#..#.</em>.#....#..#..#....#..#..#....#..#..#....#..#..#....#..#. +<em>..#.#...#.#</em>..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.# +<em>.#...##..#.</em>.#...##..#..#...##..#..#...##..#..#...##..#..#...##..#. +<em>..#.##.....</em>..#.##.......#.##.......#.##.......#.##.......#.##..... ---> +<em>.#.#.#....#</em>.#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....# +<em>.#........#</em>.#........#.#........#.#........#.#........#.#........# +<em>#.##...#...</em>#.##...#...#.##...#...#.##...#...#.##...#...#.##...#... +<em>#...##....#</em>#...##....##...##....##...##....##...##....##...##....# +<em>.#..#...#.#</em>.#..#...#.#.#..#...#.#.#..#...#.#.#..#...#.#.#..#...#.# ---> +</code></pre> +<p>You start on the open square (<code>.</code>) in the top-left corner and need to reach the bottom (below the bottom-most row on your map).</p> +<p>The toboggan can only follow a few specific slopes (you opted for a cheaper model that prefers rational numbers); start by <em>counting all the trees</em> you would encounter for the slope <em>right 3, down 1</em>:</p> +<p>From your starting position at the top-left, check the position that is right 3 and down 1. Then, check the position that is right 3 and down 1 from there, and so on until you go past the bottom of the map.</p> +<p>The locations you'd check in the above example are marked here with <code><em>O</em></code> where there was an open square and <code><em>X</em></code> where there was a tree:</p> +<pre><code>..##.........##.........##.........##.........##.........##....... ---> +#..<em>O</em>#...#..#...#...#..#...#...#..#...#...#..#...#...#..#...#...#.. +.#....<em>X</em>..#..#....#..#..#....#..#..#....#..#..#....#..#..#....#..#. +..#.#...#<em>O</em>#..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.# +.#...##..#..<em>X</em>...##..#..#...##..#..#...##..#..#...##..#..#...##..#. +..#.##.......#.<em>X</em>#.......#.##.......#.##.......#.##.......#.##..... ---> +.#.#.#....#.#.#.#.<em>O</em>..#.#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....# +.#........#.#........<em>X</em>.#........#.#........#.#........#.#........# +#.##...#...#.##...#...#.<em>X</em>#...#...#.##...#...#.##...#...#.##...#... +#...##....##...##....##...#<em>X</em>....##...##....##...##....##...##....# +.#..#...#.#.#..#...#.#.#..#...<em>X</em>.#.#..#...#.#.#..#...#.#.#..#...#.# ---> +</code></pre> +<p>In this example, traversing the map using this slope would cause you to encounter <code><em>7</em></code> trees.</p> +<p>Starting at the top-left corner of your map and following a slope of right 3 and down 1, <em>how many trees would you encounter?</em></p> +</article> +<p>Your puzzle answer was <code>228</code>.</p><article class="day-desc"><h2 id="part2">--- Part Two ---</h2><p>Time to check the rest of the slopes - you need to minimize the probability of a sudden arboreal stop, after all.</p> +<p>Determine the number of trees you would encounter if, for each of the following slopes, you start at the top-left corner and traverse the map all the way to the bottom:</p> +<ul> +<li>Right 1, down 1.</li> +<li>Right 3, down 1. (This is the slope you already checked.)</li> +<li>Right 5, down 1.</li> +<li>Right 7, down 1.</li> +<li>Right 1, down 2.</li> +</ul> +<p>In the above example, these slopes would find <code>2</code>, <code>7</code>, <code>3</code>, <code>4</code>, and <code>2</code> tree(s) respectively; multiplied together, these produce the answer <code><em>336</em></code>.</p> +<p><em>What do you get if you multiply together the number of trees encountered on each of the listed slopes?</em></p> +</article> +<p>Your puzzle answer was <code>6818112000</code>.</p><p class="day-success">Both parts of this puzzle are complete! They provide two gold stars: **</p> +<p>At this point, you should <a href="/2020">return to your Advent calendar</a> and try another puzzle.</p> +<p>If you still want to see it, you can <a href="3/input" target="_blank">get your puzzle input</a>.</p> +<p>You can also <span class="share">[Share<span class="share-content">on + <a href="https://twitter.com/intent/tweet?text=I%27ve+completed+%22Toboggan+Trajectory%22+%2D+Day+3+%2D+Advent+of+Code+2020&url=https%3A%2F%2Fadventofcode%2Ecom%2F2020%2Fday%2F3&related=ericwastl&hashtags=AdventOfCode" target="_blank">Twitter</a> + <a href="javascript:void(0);" onclick="var mastodon_instance=prompt('Mastodon Instance / Server Name?'); if(typeof mastodon_instance==='string' && mastodon_instance.length){this.href='https://'+mastodon_instance+'/share?text=I%27ve+completed+%22Toboggan+Trajectory%22+%2D+Day+3+%2D+Advent+of+Code+2020+%23AdventOfCode+https%3A%2F%2Fadventofcode%2Ecom%2F2020%2Fday%2F3'}else{return false;}" target="_blank">Mastodon</a +></span>]</span> this puzzle.</p> +</main> + +<!-- ga --> +<script> +(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ +(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), +m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) +})(window,document,'script','//www.google-analytics.com/analytics.js','ga'); +ga('create', 'UA-69522494-1', 'auto'); +ga('set', 'anonymizeIp', true); +ga('send', 'pageview'); +</script> +<!-- /ga --> +</body> +</html> \ No newline at end of file diff --git a/stack.yaml b/stack.yaml index 5733ed4..4659b84 100644 --- a/stack.yaml +++ b/stack.yaml @@ -37,6 +37,7 @@ packages: # - . - advent01 - advent02 +- advent03 # Dependency packages to be pulled from upstream that are not in the resolver. # These entries can reference officially published versions as well as -- 2.43.0