Day 2
authorNeil Smith <neil.git@njae.me.uk>
Thu, 2 Dec 2021 10:17:28 +0000 (10:17 +0000)
committerNeil Smith <neil.git@njae.me.uk>
Thu, 2 Dec 2021 10:17:28 +0000 (10:17 +0000)
advent-of-code21.cabal
advent02/Main.hs [new file with mode: 0644]
data/advent02.txt [new file with mode: 0644]
problems/day02.html [new file with mode: 0644]

index 54f366837e2b426274eb4bd02d781eadbe56e140..24e58803d075ecee9c8328f60c96c2a3da885260 100644 (file)
@@ -84,4 +84,9 @@ executable advent01
   -- other-extensions:
   -- build-depends:       base >=4.13 && < 4.15
   -- hs-source-dirs:
-  -- default-language:    Haskell2010
\ No newline at end of file
+  -- default-language:    Haskell2010
+
+executable advent02
+  import: common-extensions, build-directives
+  main-is:             advent02/Main.hs
+  build-depends: text, attoparsec
diff --git a/advent02/Main.hs b/advent02/Main.hs
new file mode 100644 (file)
index 0000000..360e7e9
--- /dev/null
@@ -0,0 +1,64 @@
+import Data.Text ()
+import qualified Data.Text.IO as TIO
+
+import Data.Attoparsec.Text
+import Control.Applicative
+
+type Course = [Command]
+data Command =   Forward Int
+               | Up Int
+               | Down Int
+               deriving (Eq, Show)
+
+data Position = Position Int Int -- forward, depth
+  deriving (Eq, Show)               
+
+data AimedPosition = AimedPosition Int Int Int -- forward, depth, aim
+  deriving (Eq, Show)               
+
+main :: IO ()
+main = 
+  do  text <- TIO.readFile "data/advent02.txt"
+      let course = successfulParse text
+      print $ part1 course
+      print $ part2 course
+
+part1 :: Course -> Int
+part1 course = finalH * finalD
+  where (Position finalH finalD) = followCourse course
+
+part2 :: Course -> Int
+part2 course = finalH * finalD
+  where (AimedPosition finalH finalD _) = followAimedCourse course
+
+followCourse :: Course -> Position
+followCourse = foldl courseStep (Position 0 0)
+
+courseStep :: Position -> Command -> Position
+courseStep (Position h d) (Forward n) = Position (h + n) d
+courseStep (Position h d) (Up n)      = Position h (d - n)
+courseStep (Position h d) (Down n)    = Position h (d + n)
+
+followAimedCourse :: Course -> AimedPosition
+followAimedCourse = foldl courseAimedStep (AimedPosition 0 0 0)
+
+courseAimedStep :: AimedPosition -> Command -> AimedPosition
+courseAimedStep (AimedPosition h d a) (Forward n) = AimedPosition (h + n) (d + a * n) a
+courseAimedStep (AimedPosition h d a) (Up n)      = AimedPosition h d (a - n)
+courseAimedStep (AimedPosition h d a) (Down n)    = AimedPosition h d (a + n)
+
+
+-- Parse the input file
+
+courseP = commandP `sepBy` endOfLine
+commandP = forwardP <|> upP <|> downP
+
+forwardP = Forward <$> ("forward " *> decimal)
+upP = Up <$> ("up " *> decimal)
+downP = Down <$> ("down " *> decimal)
+
+-- successfulParse :: Text -> (Integer, [Maybe Integer])
+successfulParse input = 
+  case parseOnly courseP input of
+    Left  _err -> [] -- TIO.putStr $ T.pack $ parseErrorPretty err
+    Right course -> course
diff --git a/data/advent02.txt b/data/advent02.txt
new file mode 100644 (file)
index 0000000..6c63607
--- /dev/null
@@ -0,0 +1,1000 @@
+forward 8
+down 6
+down 8
+forward 7
+down 5
+up 2
+down 3
+down 7
+down 8
+down 8
+down 8
+down 2
+up 1
+down 3
+up 2
+down 4
+down 2
+forward 6
+forward 4
+down 3
+down 2
+forward 2
+forward 1
+forward 4
+forward 5
+forward 8
+down 1
+down 4
+up 5
+up 2
+forward 3
+down 9
+forward 7
+forward 9
+forward 9
+forward 8
+down 1
+down 2
+forward 7
+down 3
+forward 6
+down 4
+forward 7
+down 1
+up 8
+forward 3
+down 1
+forward 7
+up 1
+forward 8
+up 6
+up 2
+down 6
+forward 1
+up 6
+forward 5
+down 9
+up 5
+forward 7
+forward 9
+down 9
+down 3
+forward 7
+forward 8
+forward 3
+forward 9
+forward 7
+down 3
+down 7
+down 4
+forward 2
+down 7
+down 3
+down 5
+up 1
+down 9
+up 4
+forward 1
+up 9
+down 2
+forward 8
+down 8
+down 6
+forward 7
+down 9
+down 3
+forward 8
+forward 3
+down 6
+down 7
+down 4
+forward 3
+down 3
+down 9
+forward 8
+forward 9
+up 5
+forward 1
+down 3
+down 3
+down 3
+down 9
+down 2
+down 9
+forward 5
+up 3
+up 5
+up 7
+down 2
+down 7
+down 9
+down 5
+down 4
+down 8
+forward 1
+up 8
+up 3
+forward 1
+forward 5
+forward 3
+up 7
+down 9
+down 9
+forward 7
+down 1
+forward 1
+forward 8
+forward 6
+down 1
+down 7
+forward 9
+up 4
+forward 8
+up 6
+forward 3
+down 3
+down 9
+forward 5
+up 3
+down 7
+forward 9
+forward 2
+up 1
+forward 7
+up 8
+forward 7
+forward 1
+up 3
+up 7
+down 1
+forward 5
+up 8
+down 2
+up 2
+up 3
+down 5
+forward 6
+up 8
+down 7
+up 8
+up 4
+down 8
+forward 9
+down 8
+down 2
+up 7
+down 5
+forward 1
+up 1
+down 1
+forward 1
+forward 1
+forward 3
+forward 8
+down 4
+down 5
+forward 9
+up 6
+up 7
+down 8
+forward 8
+down 2
+forward 6
+down 3
+forward 9
+forward 5
+up 7
+down 2
+up 6
+up 6
+down 9
+forward 3
+up 1
+up 2
+forward 9
+down 1
+up 3
+forward 4
+forward 9
+down 3
+down 4
+forward 4
+up 6
+up 5
+forward 2
+down 5
+down 1
+forward 9
+down 7
+up 6
+up 5
+forward 4
+forward 9
+down 6
+forward 1
+up 6
+down 1
+forward 4
+up 9
+down 6
+forward 5
+down 2
+forward 8
+forward 9
+down 7
+down 4
+down 1
+forward 1
+down 4
+down 6
+forward 5
+forward 2
+forward 8
+forward 5
+down 6
+up 9
+forward 2
+down 1
+forward 6
+forward 6
+down 5
+forward 5
+down 8
+forward 3
+down 5
+up 1
+forward 4
+down 5
+down 4
+forward 4
+down 3
+down 5
+down 7
+forward 5
+forward 2
+up 2
+up 4
+forward 7
+down 3
+down 1
+down 7
+up 8
+forward 6
+forward 3
+forward 7
+forward 5
+up 5
+down 3
+down 6
+forward 7
+up 9
+up 5
+forward 2
+down 9
+forward 8
+forward 6
+forward 5
+up 5
+down 9
+down 8
+up 2
+up 4
+forward 5
+forward 2
+up 4
+forward 3
+down 7
+forward 8
+forward 1
+forward 9
+forward 6
+up 7
+up 2
+forward 1
+down 5
+forward 9
+down 8
+down 4
+down 7
+up 2
+down 5
+forward 7
+up 3
+forward 6
+down 2
+forward 8
+forward 8
+up 3
+forward 6
+forward 9
+forward 8
+forward 3
+up 9
+forward 9
+down 6
+forward 5
+forward 8
+up 1
+forward 2
+forward 6
+forward 8
+up 6
+down 3
+down 9
+down 6
+up 7
+forward 6
+forward 1
+forward 1
+forward 7
+down 5
+down 9
+down 3
+up 3
+forward 3
+forward 2
+down 5
+up 4
+forward 1
+down 9
+forward 9
+forward 1
+forward 1
+down 9
+down 2
+forward 4
+forward 9
+down 5
+up 5
+down 6
+forward 8
+down 4
+down 1
+up 5
+up 3
+down 2
+down 3
+forward 8
+forward 5
+forward 9
+down 4
+up 9
+down 1
+forward 2
+down 8
+up 2
+down 8
+up 6
+forward 7
+down 1
+up 7
+down 9
+forward 9
+down 9
+forward 7
+forward 4
+down 5
+up 3
+down 3
+forward 8
+down 3
+down 4
+down 9
+forward 4
+up 4
+forward 6
+down 1
+forward 5
+down 2
+forward 6
+down 4
+down 1
+forward 3
+up 3
+up 3
+forward 8
+forward 6
+forward 6
+down 9
+forward 5
+down 9
+forward 6
+forward 3
+up 4
+forward 6
+down 8
+up 3
+down 9
+down 3
+forward 6
+down 4
+down 8
+down 6
+down 5
+forward 1
+down 3
+forward 9
+down 9
+down 3
+forward 9
+down 2
+forward 3
+up 6
+forward 2
+forward 1
+forward 8
+down 2
+down 2
+down 7
+up 7
+forward 3
+up 2
+up 6
+up 6
+down 2
+forward 2
+forward 2
+down 6
+down 2
+up 6
+forward 4
+down 9
+up 3
+down 4
+forward 7
+up 6
+forward 3
+forward 1
+down 1
+down 8
+down 8
+down 1
+forward 2
+down 6
+down 6
+forward 2
+up 6
+down 2
+up 4
+down 1
+up 8
+up 5
+down 4
+forward 2
+forward 2
+down 2
+forward 9
+down 5
+down 9
+forward 6
+down 9
+down 5
+down 7
+down 3
+up 9
+down 6
+up 6
+up 8
+forward 8
+forward 8
+down 3
+up 9
+forward 9
+forward 8
+forward 6
+down 4
+down 6
+up 9
+down 9
+down 5
+up 2
+up 2
+forward 2
+forward 1
+down 5
+down 8
+up 3
+forward 2
+down 1
+down 9
+forward 7
+forward 5
+up 3
+up 6
+down 5
+up 1
+down 2
+up 7
+forward 1
+down 6
+up 6
+up 1
+up 2
+forward 2
+down 4
+up 1
+up 3
+up 9
+up 7
+forward 4
+down 5
+down 9
+down 8
+forward 1
+down 4
+forward 4
+forward 8
+up 4
+down 8
+down 1
+down 9
+down 5
+forward 3
+forward 8
+up 2
+down 6
+up 6
+forward 5
+down 6
+down 8
+forward 6
+down 6
+up 5
+down 2
+up 5
+down 7
+down 9
+forward 3
+down 8
+forward 1
+forward 5
+forward 2
+down 4
+forward 2
+forward 7
+up 7
+up 3
+down 2
+forward 7
+up 6
+forward 6
+forward 1
+down 4
+down 2
+down 6
+down 1
+forward 1
+forward 8
+down 1
+up 2
+down 2
+down 1
+down 6
+forward 7
+forward 6
+forward 5
+down 1
+down 8
+down 1
+up 5
+forward 6
+forward 5
+up 5
+forward 5
+up 8
+down 3
+forward 1
+forward 6
+up 8
+up 9
+down 7
+down 1
+forward 2
+forward 1
+forward 9
+forward 3
+forward 7
+forward 8
+down 6
+up 5
+down 1
+forward 1
+forward 8
+down 6
+forward 7
+forward 8
+down 7
+down 5
+down 7
+up 7
+down 5
+forward 5
+down 4
+down 7
+forward 6
+forward 5
+forward 6
+forward 7
+up 9
+down 2
+down 2
+down 4
+down 8
+up 3
+down 7
+down 5
+forward 6
+down 9
+down 5
+down 9
+down 1
+forward 6
+up 7
+down 2
+down 2
+forward 8
+forward 1
+down 3
+down 4
+forward 3
+forward 4
+down 1
+forward 9
+up 7
+forward 8
+down 9
+forward 7
+forward 6
+forward 2
+down 8
+up 9
+down 2
+forward 8
+up 7
+down 5
+down 9
+down 3
+down 6
+down 4
+up 2
+down 3
+down 1
+up 1
+up 6
+forward 4
+down 1
+forward 1
+up 4
+forward 4
+forward 3
+forward 8
+forward 9
+forward 9
+down 2
+down 5
+up 8
+up 1
+down 9
+forward 5
+down 1
+up 5
+down 4
+up 3
+forward 9
+up 7
+forward 9
+up 1
+forward 4
+forward 8
+up 6
+down 6
+down 8
+down 8
+down 9
+down 2
+up 7
+forward 9
+up 8
+down 9
+up 6
+forward 4
+up 7
+down 6
+up 7
+down 4
+forward 2
+forward 9
+down 6
+down 8
+forward 6
+forward 3
+down 3
+forward 3
+forward 7
+up 2
+down 8
+forward 7
+down 5
+down 1
+down 6
+down 5
+down 2
+up 6
+forward 7
+forward 6
+down 1
+down 5
+forward 7
+forward 3
+down 9
+down 8
+forward 5
+up 7
+forward 1
+up 5
+down 7
+forward 8
+forward 6
+forward 2
+down 1
+down 9
+up 1
+down 2
+down 2
+down 7
+down 4
+forward 1
+down 3
+down 5
+up 8
+forward 7
+up 5
+down 8
+down 6
+down 3
+down 3
+down 9
+down 7
+forward 4
+up 5
+forward 3
+forward 7
+down 3
+up 6
+forward 4
+forward 4
+down 4
+down 2
+up 1
+forward 8
+forward 3
+up 1
+forward 1
+down 9
+down 6
+up 1
+down 4
+down 8
+up 9
+forward 2
+down 3
+forward 8
+down 6
+down 5
+down 4
+up 5
+down 9
+up 3
+forward 4
+down 9
+down 7
+forward 6
+forward 6
+forward 8
+forward 6
+down 9
+down 1
+forward 3
+forward 9
+forward 4
+up 8
+up 5
+up 2
+down 9
+forward 9
+forward 3
+forward 5
+up 8
+down 2
+down 1
+forward 9
+forward 7
+down 7
+forward 1
+down 5
+down 8
+down 4
+down 7
+down 1
+down 4
+down 7
+forward 2
+down 5
+forward 1
+down 4
+down 5
+down 2
+up 5
+forward 9
+down 5
+forward 1
+down 7
+down 4
+down 7
+down 6
+forward 5
+down 3
+down 1
+up 2
+forward 2
+forward 2
+forward 1
+down 1
+forward 3
+forward 5
+forward 4
+down 7
+forward 7
+down 1
+forward 7
+forward 5
+down 8
+forward 6
+forward 6
+forward 6
+forward 7
+up 9
+down 4
+down 1
+down 8
+forward 7
+up 4
+forward 4
+down 6
+up 1
+forward 5
+forward 2
+down 1
+forward 7
+forward 6
+forward 5
+forward 2
+down 5
+down 6
+down 9
+up 4
+forward 6
+forward 2
+down 5
+down 3
+up 4
+down 6
+up 8
+forward 8
+up 9
+forward 6
+forward 6
+up 5
+down 7
+forward 9
+forward 6
+down 9
+down 9
+up 1
+forward 7
+down 6
+up 4
+down 8
+down 3
+forward 9
+forward 5
+forward 9
+down 2
+forward 3
+down 1
+forward 9
+up 4
+up 8
+forward 6
+down 1
+forward 9
+forward 4
+down 5
+forward 2
+up 3
+forward 5
+up 8
+up 7
+down 8
+forward 4
+down 6
+forward 7
+up 2
+down 2
+forward 4
+down 9
+down 8
+forward 2
+forward 2
+down 2
+down 3
+forward 3
+down 1
+forward 8
+down 7
+up 9
+down 4
+down 2
+down 5
+up 7
+down 8
+down 2
+down 4
+down 4
+down 8
+forward 7
+forward 7
+down 8
+up 2
+up 3
+forward 8
+up 1
+down 7
+forward 7
+down 6
+down 8
+up 6
+forward 5
+forward 3
+down 6
+forward 9
+up 4
+up 7
+forward 4
+down 1
+down 8
+down 1
+forward 9
+down 3
+forward 8
+forward 6
+forward 4
+down 9
+forward 3
+up 5
+up 8
+down 9
+down 5
+down 1
+up 8
+forward 8
+up 6
+forward 2
+down 8
+up 4
+up 7
+forward 7
+forward 5
+forward 9
+forward 2
+up 4
+down 9
+forward 7
+down 6
+down 6
+forward 7
+down 5
+up 6
+down 9
+forward 3
\ No newline at end of file
diff --git a/problems/day02.html b/problems/day02.html
new file mode 100644 (file)
index 0000000..499fc0c
--- /dev/null
@@ -0,0 +1,170 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+<meta charset="utf-8"/>
+<title>Day 2 - Advent of Code 2021</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?26"/>
+<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="/2021/about">[About]</a></li><li><a href="/2021/events">[Events]</a></li><li><a href="https://teespring.com/stores/advent-of-code" target="_blank">[Shop]</a></li><li><a href="/2021/settings">[Settings]</a></li><li><a href="/2021/auth/logout">[Log Out]</a></li></ul></nav><div class="user">Neil Smith <a href="/2021/support" class="supporter-badge" title="Advent of Code Supporter">(AoC++)</a> <span class="star-count">4*</span></div></div><div><h1 class="title-event">&nbsp;&nbsp;&nbsp;<span class="title-event-wrap">int y=</span><a href="/2021">2021</a><span class="title-event-wrap">;</span></h1><nav><ul><li><a href="/2021">[Calendar]</a></li><li><a href="/2021/support">[AoC++]</a></li><li><a href="/2021/sponsors">[Sponsors]</a></li><li><a href="/2021/leaderboard">[Leaderboard]</a></li><li><a href="/2021/stats">[Stats]</a></li></ul></nav></div></header>
+
+<div id="sidebar">
+<div id="sponsor"><div class="quiet">Our <a href="/2021/sponsors">sponsors</a> help make Advent of Code possible:</div><div class="sponsor"><a href="https://www.ing.jobs/Global/Careers/expertise/Tech.htm" target="_blank" onclick="if(ga)ga('send','event','sponsor','sidebar',this.href);" rel="noopener">ING</a> - At ING, you develop software and yourself</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 2: Dive! ---</h2><p>Now, you need to figure out how to <span title="Tank, I need a pilot program for a B212 helicopter.">pilot this thing</span>.</p>
+<p>It seems like the submarine can take a series of commands like <code>forward 1</code>, <code>down 2</code>, or <code>up 3</code>:</p>
+<ul>
+<li><code>forward X</code> increases the horizontal position by <code>X</code> units.</li>
+<li><code>down X</code> <em>increases</em> the depth by <code>X</code> units.</li>
+<li><code>up X</code> <em>decreases</em> the depth by <code>X</code> units.</li>
+</ul>
+<p>Note that since you're on a submarine, <code>down</code> and <code>up</code> affect your <em>depth</em>, and so they have the opposite result of what you might expect.</p>
+<p>The submarine seems to already have a planned course (your puzzle input). You should probably figure out where it's going. For example:</p>
+<pre><code>forward 5
+down 5
+forward 8
+up 3
+down 8
+forward 2
+</code></pre>
+<p>Your horizontal position and depth both start at <code>0</code>. The steps above would then modify them as follows:</p>
+<ul>
+<li><code>forward 5</code> adds <code>5</code> to your horizontal position, a total of <code>5</code>.</li>
+<li><code>down 5</code> adds <code>5</code> to your depth, resulting in a value of <code>5</code>.</li>
+<li><code>forward 8</code> adds <code>8</code> to your horizontal position, a total of <code>13</code>.</li>
+<li><code>up 3</code> decreases your depth by <code>3</code>, resulting in a value of <code>2</code>.</li>
+<li><code>down 8</code> adds <code>8</code> to your depth, resulting in a value of <code>10</code>.</li>
+<li><code>forward 2</code> adds <code>2</code> to your horizontal position, a total of <code>15</code>.</li>
+</ul>
+<p>After following these instructions, you would have a horizontal position of <code>15</code> and a depth of <code>10</code>. (Multiplying these together produces <code><em>150</em></code>.)</p>
+<p>Calculate the horizontal position and depth you would have after following the planned course. <em>What do you get if you multiply your final horizontal position by your final depth?</em></p>
+</article>
+<p>Your puzzle answer was <code>2039912</code>.</p><article class="day-desc"><h2 id="part2">--- Part Two ---</h2><p>Based on your calculations, the planned course doesn't seem to make any sense. You find the submarine manual and discover that the process is actually slightly more complicated.</p>
+<p>In addition to horizontal position and depth, you'll also need to track a third value, <em>aim</em>, which also starts at <code>0</code>. The commands also mean something entirely different than you first thought:</p>
+<ul>
+<li><code>down X</code> <em>increases</em> your aim by <code>X</code> units.</li>
+<li><code>up X</code> <em>decreases</em> your aim by <code>X</code> units.</li>
+<li><code>forward X</code> does two things:<ul>
+  <li>It increases your horizontal position by <code>X</code> units.</li>
+  <li>It increases your depth by your aim <em>multiplied by</em> <code>X</code>.</li>
+</ul></li>
+</ul>
+<p>Again note that since you're on a submarine, <code>down</code> and <code>up</code> do the opposite of what you might expect: "down" means aiming in the positive direction.</p>
+<p>Now, the above example does something different:</p>
+<ul>
+<li><code>forward 5</code> adds <code>5</code> to your horizontal position, a total of <code>5</code>. Because your aim is <code>0</code>, your depth does not change.</li>
+<li><code>down 5</code> adds <code>5</code> to your aim, resulting in a value of <code>5</code>.</li>
+<li><code>forward 8</code> adds <code>8</code> to your horizontal position, a total of <code>13</code>. Because your aim is <code>5</code>, your depth increases by <code>8*5=40</code>.</li>
+<li><code>up 3</code> decreases your aim by <code>3</code>, resulting in a value of <code>2</code>.</li>
+<li><code>down 8</code> adds <code>8</code> to your aim, resulting in a value of <code>10</code>.</li>
+<li><code>forward 2</code> adds <code>2</code> to your horizontal position, a total of <code>15</code>.  Because your aim is <code>10</code>, your depth increases by <code>2*10=20</code> to a total of <code>60</code>.</li>
+</ul>
+<p>After following these new instructions, you would have a horizontal position of <code>15</code> and a depth of <code>60</code>. (Multiplying these produces <code><em>900</em></code>.)</p>
+<p>Using this new interpretation of the commands, calculate the horizontal position and depth you would have after following the planned course. <em>What do you get if you multiply your final horizontal position by your final depth?</em></p>
+</article>
+<p>Your puzzle answer was <code>1942068080</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="/2021">return to your Advent calendar</a> and try another puzzle.</p>
+<p>If you still want to see it, you can <a href="2/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+%22Dive%21%22+%2D+Day+2+%2D+Advent+of+Code+2021&amp;url=https%3A%2F%2Fadventofcode%2Ecom%2F2021%2Fday%2F2&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+%22Dive%21%22+%2D+Day+2+%2D+Advent+of+Code+2021+%23AdventOfCode+https%3A%2F%2Fadventofcode%2Ecom%2F2021%2Fday%2F2'}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