Done day 3
authorNeil Smith <neil.git@njae.me.uk>
Tue, 8 Dec 2020 10:41:54 +0000 (10:41 +0000)
committerNeil Smith <neil.git@njae.me.uk>
Tue, 8 Dec 2020 10:41:54 +0000 (10:41 +0000)
advent02/src/advent02.hs
advent03/package.yaml [new file with mode: 0644]
advent03/src/advent03.hs [new file with mode: 0644]
data/advent03.txt [new file with mode: 0644]
data/advent03a.txt [new file with mode: 0644]
problems/day03.html [new file with mode: 0644]
stack.yaml

index 27886d05744f8c57507ef52f379f24b6e0b7f1fa..ce0eeb77245d679691debdde5f5c42379d3e47c3 100644 (file)
@@ -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 (file)
index 0000000..dc4d10d
--- /dev/null
@@ -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 (file)
index 0000000..777cf7e
--- /dev/null
@@ -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 (file)
index 0000000..d193cf2
--- /dev/null
@@ -0,0 +1,323 @@
+.#.#....##.......#..........#..
+...#...........##...#..#.......
+#.####......##.#...#......#.#..
+##.....#.#.#..#.#............#.
+##.....#....#.........#...##...
+###..#.....#....#..............
+..........#..#.#..#.#....#.....
+##.....#....#.#...#.##.........
+#...#......#....##....#..#.#...
+.##.##...#....##..#.#.....#...#
+.....#.#..........##.#........#
+.##..................#..#..##.#
+#.#..........##....#.####......
+.#......#.#......#.........#...
+#....#..##.##..##........#.#...
+##..#.##..#...#..####.#..#.....
+###....#.###.##...........##..#
+.....#.##.....##.#..#####....##
+....#.###....#..##....##...#...
+..###.#...##.....#.##..#..#.#..
+#...#..#..#.........#..#.......
+##..#.#.....#.#.#.......#...#.#
+...#...##.#........#...#.......
+..#..#.#..#...#...#...........#
+........#.....#......#...##....
+#........##.##.#.#...#...#.....
+####.......#.##.###.#....#.....
+...#...........#...#......#...#
+##...#...#............#.......#
+....#...........##.......#.....
+###......#.....#....#...#.#...#
+.....##..........#.......#.#...
+##.##.##...#......#....#.......
+##..#.#..#......#...#..#.......
+....#....##.##............####.
+..#.###..#.##.###..#.##.......#
+#.##..#.#.....#..#.....##......
+..##..#.....##.#.##........#...
+.#..#.#......#..#............#.
+.....#..#.#...#....#.##.#......
+.#...##.#..#.#...##...##..##...
+###............#.#..#..#...#...
+..#..##.####.#.....#.....##.###
+#....#.##..##....#..#...#.##.#.
+.....#.##.........##...##......
+.........####.#....#.#......#.#
+.........#.#..#...#.#..#.#....#
+.#.....#..##.##..##....#.......
+..........##......#.##.###....#
+.##...###..##.#...#........##..
+..............#.#....#.#.###.##
+..##.##.......#.#......##...#..
+.#.....#..##..#.###...#..#.##.#
+#.....#.#..#...#........#...#..
+.#......#....#.#.....###...#..#
+..##.#....#..##......#.....#...
+..#.#.##..#.....#.####..###....
+.........#......#..#...........
+..#........#.##.#.....##.##..#.
+.......#.........#....#...#.#..
+.##.....#.#....#.#.......#.....
+..........#.##........##...##..
+###..###.#.#..#..#####.##.#.##.
+..##..##.#.#...#..#.#.#......#.
+#..#..#..#..##..#.....#......#.
+..#....#.##..#......##.........
+..#.##......#...##.#......#....
+.......#..#.##.#.....#.........
+.......#.#.#.###...##......#...
+.....#.#..........#..#...#.....
+....##..........#..........##..
+..#......#.....#.##.#..#...#.#.
+....#.....#..#...#..#.#.##..###
+.####....#........#...#........
+...##.#.##.#..#...##...#.##....
+....#...#...#.#.#.#...#..#.....
+.....#...#.#.....#.#........##.
+..#.#.......###.#.....##.......
+......#.........##....#....#..#
+.............##.....##.........
+.........##...##.......#.....#.
+##.........#..........#.###..##
+...#.....#......#....#..##.....
+##..#...#...##.#.....#.#......#
+..#...##.#.......#.#......#.##.
+......#.......#.#...........#..
+..........#.....##............#
+#........#...#..#.......###.##.
+.##...........#.#........#.#.#.
+...#..##...#.#....#####.#......
+.....##...###...#..#.##...####.
+...#....#.....#..#.......#.....
+#....#....#...#..#..#.######..#
+#.###...........#......#...#..#
+.#.#.#.#..#....#....#...##.#...
+.#..#.........#.#....###...#...
+......#..##.##..........#....##
+.....#......##....##.....#...#.
+.#...#.#.#....##....#..#....#.#
+..................#..###.#..##.
+..#.........#......#....#..###.
+#.#.....#..#..#....###..###....
+..##..##.#..##........##...##..
+##..#........##..###..#.....#.#
+..#..###..#......#....#...#...#
+#..#.#..............##.#..#.#..
+.....####....#...####.....#.#..
+.....#....##.#......###........
+##.##...#.#.#.#.......#....##..
+.#......#...#.#....#..##.#.##.#
+#.#.##.#.#......#..##........##
+...##.....#.....#...#..###...#.
+........###.....#.....#...##..#
+.....#.##.##......#.#....#...#.
+.#....##.......#..#.####.......
+.#..#....#..........#......#.#.
+.#.##.##.....###.#.#...........
+.........#......#..##..........
+....#...##.#.#.#..#.#.........#
+..#.....#.##...#..#..#.###....#
+...#.##......#.....##....#.....
+###............#.#....#...#....
+.......#.....#..#.#.#....#..#.#
+...#......#.#..##..#....#...#.#
+............##........##..##...
+..#..#.##..#......###..#.......
+........#.........#............
+..#...#.#########.#...##..###..
+#....#......#.......#.#.....#..
+#.#..#....###.###....#...#.#...
+#...###.#.#.......#.##......#..
+.................#...#.#.#.....
+##....#...#........#....#.#..#.
+......#.....#...#..........#.#.
+##..........#...#..........#.##
+..#.#.##.#....#.#......#...##..
+.....#.......#..#.....#........
+#.##.#..##..#.......##.........
+....#......#..#..#.#...#.......
+...#....#................###...
+.##.....#.#....#.#..........##.
+...#..#....#.##.##......#......
+..#.#....#.......#.#..##.......
+....#.....#..........##.#.#####
+#.....................##..#..#.
+.###..#.##.......##.#...#..#...
+...###.......#..#...#......#..#
+#..#...#.#..#.#..#..#.##.......
+#...##.......#..#..#.##..###...
+......#....#.#.#........#.##..#
+..##..#....#....#..#.#..#......
+..##.#...#.#######..#...#.....#
+..#....#..#.........#..##......
+...#....#.#......#..#..#.#.....
+#..#....#........#.#..##....###
+#....#..##......##.##.....#.###
+...#.#..........#..#.#.#.#.##..
+......##..#.#..#.#....#....#...
+##....#....#..#..#.##......#...
+....#.#..##.#.#...###....##.#..
+...#.......##..#.......#...#...
+......##.......#..##.....#...#.
+...#.#...#...........#...#.....
+.#....#...#......##.##..###..#.
+.#..........#...#...#...##.##..
+.....###..#.....#..##....#.####
+..#.###..#..##..##.....#.#.....
+.............#.###...##.#.....#
+....###.......###.#.....#..#.#.
+........##.#.........#.....###.
+.....###.#..#.....#...#..#.....
+.#....#..##.#..#.#....#.......#
+........#......#.#..#.#..#...##
+...#.##.##......#..............
+.#.....##.#.....#..#......##...
+#..#..#.....#.....#.....###....
+.##...........#..#.##.....#....
+..#.#......#.#...#.##.#..#...##
+...#..........#.....#..........
+#.#.#.#.#...#....#...#.....##..
+#......##...#...#..........#.#.
+....##........#.#..............
+#..#.#.#..#........##......#.##
+........####...##.#.....#......
+....#........#.#..#..##..#.#...
+.#.....#..###...#..#.....#..#..
+#......###.#..#....#..#.#......
+....#.....##.##..#...#.#..##.#.
+..##..#...#.#......#....#...#.#
+#..##...##..#...###...#..#.....
+.......#.....#...........##....
+#..##....#........#....##..#.#.
+.#........#..##...###.#..#.....
+.#.#....#..##...#...##.#..###..
+#.........#.......#.....#.#....
+#..#.....#.#.###.#..#......#...
+....#..#.#....#..##..###....###
+###.##.#.#..#...........#.#.#..
+..##.#.......#......#..##....#.
+.....#.#.#.......##.......#...#
+...........#.##....##.##....#.#
+...#.......#..#.##..#......#..#
+#.#.#...#......##.#...........#
+##........#...........###.#..#.
+..........#.#.#....#.#..##.#.#.
+...#.#.#....#..........#..#....
+#.#....###.#.#..#.......###...#
+.#....#......#.#.#..#..#.......
+......##.............#....#.#.#
+.#..........#.........#.##.....
+##....#....##....#..#.......#..
+#.##.##.#..#..#.....#..#.##.#..
+.#..#.......##..#.....##.##....
+.......#..........#.#.##..#.##.
+....#.....#.#...##....##.......
+.......#.........#...##....##.#
+#.....#......#..........#...#..
+...#.#.......#.#..#....###..#..
+.....#.#.#.........#...........
+.#..###.#.#........#.#.........
+.........#..#......##...##....#
+...###..#.....##.....#.###....#
+.##...#...#........###.#..#....
+.##........#..#.###.######.##.#
+##.#...#.#....#..##.#....##....
+.......##.....##.#..###.#......
+..##...##........#.......#....#
+#..##...#.####...###......#...#
+.##.....#.##.#.#.....###.#..##.
+..###....#.#.###.#....#........
+....#..###..#...#....#..#..#.#.
+#.#.##....##...##.......#......
+.........#...#....#..#.........
+.............#...#..##.#.......
+...#.##.......#...#.#..##.##...
+.####.#.##..#.#......#.##...#.#
+.#..#.#.....#.................#
+..#.##..###....#...#......####.
+..##..##...........#....#...#..
+....#...#...#...#.......#....#.
+#.#...###...#...#.#...#....##.#
+......#...#.#.......#.....#...#
+....##...#.#.#....#....#.#....#
+.....#.....#...##..#...#....##.
+#.....#....#......##.##....#...
+...#.#....#...#....#.#....##..#
+...#.#..#...##....###..#.......
+...##......###...###.#...#..#..
+##.......#.......###.......#..#
+..##.##..###.#............#...#
+#.....##..#..##....##..#.......
+......#.#...#......#.....#.....
+#...........#....#..##.##.#....
+.......#..#......#...#....#...#
+.#...##...........#......#...#.
+#........#....##...###.#....#..
+.....#.......##.........#.##...
+.#.###..#....#..##.#..#.#..#...
+#.......#.##.#.#....#.#..#....#
+###.....#.#.......#..#......#.#
+#..#.#.......#.#..##..##.#.#...
+#..#.#.#.###........#.....#...#
+#.#.#..#..##.....#...........#.
+..#.#..#.....#...#...#...##....
+...#.##......#...##.#...#.#.#.#
+#..#.#.#.#.......####..........
+..#......#.#......##.###.....##
+..#...##..#.........##....#.##.
+##.##.##.#.#.....#..........##.
+.#.....###.#..#....#..#.###...#
+#...##.......###....#.#..#.....
+..#....##.........##.........##
+......#....#.##.......#........
+..#.#.#..#...#...#...##.#...#..
+......#..##.#.#.#...##...#.#.##
+#..#...##.#.....#...#.##.......
+..#..#.........##.#...#.##...##
+##.##.#....#.......#.##..#.....
+.....##...##.##...##.........##
+#......#...#.......#...#...#...
+...##...........#...#..#.......
+.#.##.#..#........#....#.......
+#.#...#..#......##...#.#.##....
+##........####..#.#...#.#.##.##
+#..#.#.##......##.#.#..#.......
+.....#.........#..#.####....#..
+......##..#....#...#.#....#....
+#...##........#.........#.....#
+.#.#...#.#.#..#............##.#
+.#..#....#....#.....#...#.....#
+..###...#..#.....#.##.###...#.#
+.#.###..#..#...#.#...#.#......#
+#...#####......###........##...
+.....#.....#..#.#....#..##.....
+....##...#.#.##.#####...#....#.
+.#.#.........##.#.......#..##..
+.#...#.#...#...#....#.#...##.#.
+.##...#..#.#..#......#.#.#..##.
+..#.....#..#.....##.....#......
+..#........#..##...#.......###.
+.#....#.......#....#....#..#...
+....#......#.#.#.........#.....
+..##...#.#.#...#.#........#....
+.#.....####...##.#..#...##.....
+...#.....#...#...#....#....#...
+.........#..#.#.....#..#.#..#..
+.........##...........#.......#
+......#..#.....##...#.##.#.....
+.#......##........##...#.#.##..
+.....#.#..##...........#..#..#.
+...#.......#...#.#..#.##..#.##.
+...#.......#.....#.#...#.##.#..
+#.....#.............##.#..####.
+.#...#......#...##.#....#.#....
+.##..##.##....#.#.....#.......#
+...#...#....#....##.#..#....##.
+..............##....#.......#.#
+.#.#.#...##..#..#...###.#..#...
+.#.#...#.#..#.#..#...######..#.
+........#......#.#..#.#....#...
+..###.....###.#.##....#...##...
+.##.#.....#.......##.......#...
+..#..##...#..........#.#....#.#
diff --git a/data/advent03a.txt b/data/advent03a.txt
new file mode 100644 (file)
index 0000000..7e88cdc
--- /dev/null
@@ -0,0 +1,11 @@
+..##.......
+#...#...#..
+.#....#..#.
+..#.#...#.#
+.#...##..#.
+..#.##.....
+.#.#.#....#
+.#........#
+#.##...#...
+#...##....#
+.#..#...#.#
diff --git a/problems/day03.html b/problems/day03.html
new file mode 100644 (file)
index 0000000..ad12ea8
--- /dev/null
@@ -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">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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>..##.........##.........##.........##.........##.......  ---&gt;
+<em>#...#...#..</em>#...#...#..#...#...#..#...#...#..#...#...#..#...#...#..
+<em>.#....#..#.</em>.#....#..#..#....#..#..#....#..#..#....#..#..#....#..#.
+<em>..#.#...#.#</em>..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#
+<em>.#...##..#.</em>.#...##..#..#...##..#..#...##..#..#...##..#..#...##..#.
+<em>..#.##.....</em>..#.##.......#.##.......#.##.......#.##.......#.##.....  ---&gt;
+<em>.#.#.#....#</em>.#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....#
+<em>.#........#</em>.#........#.#........#.#........#.#........#.#........#
+<em>#.##...#...</em>#.##...#...#.##...#...#.##...#...#.##...#...#.##...#...
+<em>#...##....#</em>#...##....##...##....##...##....##...##....##...##....#
+<em>.#..#...#.#</em>.#..#...#.#.#..#...#.#.#..#...#.#.#..#...#.#.#..#...#.#  ---&gt;
+</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>..##.........##.........##.........##.........##.........##.......  ---&gt;
+#..<em>O</em>#...#..#...#...#..#...#...#..#...#...#..#...#...#..#...#...#..
+.#....<em>X</em>..#..#....#..#..#....#..#..#....#..#..#....#..#..#....#..#.
+..#.#...#<em>O</em>#..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#
+.#...##..#..<em>X</em>...##..#..#...##..#..#...##..#..#...##..#..#...##..#.
+..#.##.......#.<em>X</em>#.......#.##.......#.##.......#.##.......#.##.....  ---&gt;
+.#.#.#....#.#.#.#.<em>O</em>..#.#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....#
+.#........#.#........<em>X</em>.#........#.#........#.#........#.#........#
+#.##...#...#.##...#...#.<em>X</em>#...#...#.##...#...#.##...#...#.##...#...
+#...##....##...##....##...#<em>X</em>....##...##....##...##....##...##....#
+.#..#...#.#.#..#...#.#.#..#...<em>X</em>.#.#..#...#.#.#..#...#.#.#..#...#.#  ---&gt;
+</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&amp;url=https%3A%2F%2Fadventofcode%2Ecom%2F2020%2Fday%2F3&amp;related=ericwastl&amp;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
index 5733ed42d5310baee0c4f39d9f40150597335721..4659b84dc51ac4316296ca5206943d0c86e51a71 100644 (file)
@@ -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