From: Neil Smith <neil.git@njae.me.uk> Date: Mon, 21 Dec 2020 11:42:26 +0000 (+0000) Subject: Done day 12 X-Git-Url: https://git.njae.me.uk/?a=commitdiff_plain;h=0f78ee34867c196e4ac5d35c96334f0b644c23d9;p=advent-of-code-20.git Done day 12 --- diff --git a/advent12/package.yaml b/advent12/package.yaml new file mode 100644 index 0000000..5dbbf31 --- /dev/null +++ b/advent12/package.yaml @@ -0,0 +1,63 @@ +# 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: advent12 +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: + advent12: + main: advent12.hs + source-dirs: src + dependencies: + - base >= 2 && < 6 + - text + - attoparsec + - containers + - vector + \ No newline at end of file diff --git a/advent12/src/advent12.hs b/advent12/src/advent12.hs new file mode 100644 index 0000000..fb75491 --- /dev/null +++ b/advent12/src/advent12.hs @@ -0,0 +1,123 @@ +-- import Debug.Trace + +import Data.Text (Text) +-- import qualified Data.Text as T +import qualified Data.Text.IO as TIO + +import Data.Attoparsec.Text +-- import Data.Attoparsec.Combinator +-- import Control.Applicative + + +data Direction = North | East | South | West + deriving (Show, Eq, Ord, Enum, Bounded) + +type Position = (Int, Int) -- (x, y) + +data Action a = N a | S a | E a | W a | L a | R a | F a + deriving (Show, Eq, Ord) + +data Ship = Ship { direction :: Direction, position :: Position } + deriving (Show, Eq, Ord) + +data ShipW = ShipW { positionW :: Position + , waypoint :: Position + } + deriving (Show, Eq, Ord) + + + +main :: IO () +main = + do text <- TIO.readFile "data/advent12.txt" + let actions = successfulParse text + -- print actions + print $ part1 actions + print $ part2 actions + + +part1 actions = manhattan (position ship1) start + where start = (0, 0) + ship0 = Ship {position = start, direction = East } + ship1 = foldl act ship0 actions + +part2 actions = manhattan (positionW ship1) start + where start = (0, 0) + ship0 = ShipW {positionW = start, waypoint = (10, 1)} + ship1 = foldl actW ship0 actions + +apAc actions = ship1 + where start = (0, 0) + ship0 = Ship {position = start, direction = East } + ship1 = foldl act ship0 actions + +apAcW actions = ship1 + where start = (0, 0) + ship0 = ShipW {positionW = start, waypoint = (10, 1) } + ship1 = foldl actW ship0 actions + +act Ship{..} (N d) = Ship { position = dDelta d North position, ..} +act Ship{..} (S d) = Ship { position = dDelta d South position, ..} +act Ship{..} (W d) = Ship { position = dDelta d West position, ..} +act Ship{..} (E d) = Ship { position = dDelta d East position, ..} +act Ship{..} (L a) = Ship { direction = d, ..} where d = (iterate predW direction) !! (a `div` 90) +act Ship{..} (R a) = Ship { direction = d, ..} where d = (iterate succW direction) !! (a `div` 90) +act Ship{..} (F d) = Ship { position = dDelta d direction position, ..} + -- where (x, y) = position + -- (dx, dy) = (delta direction) + -- p' = (x + (d * dx), y + (d * dy)) + +actW ShipW{..} (N d) = ShipW { waypoint = dDelta d North waypoint, ..} +actW ShipW{..} (S d) = ShipW { waypoint = dDelta d South waypoint, ..} +actW ShipW{..} (W d) = ShipW { waypoint = dDelta d West waypoint, ..} +actW ShipW{..} (E d) = ShipW { waypoint = dDelta d East waypoint, ..} +actW ShipW{..} (L a) = ShipW { waypoint = d, ..} where d = (iterate rotL waypoint) !! (a `div` 90) +actW ShipW{..} (R a) = ShipW { waypoint = d, ..} where d = (iterate rotR waypoint) !! (a `div` 90) +actW ShipW{..} (F d) = ShipW { positionW = p', ..} + where (x, y) = positionW + (dx, dy) = waypoint + p' = (x + (d* dx), y + (d * dy)) + +rotL (x, y) = (-y, x) +rotR (x, y) = (y, -x) + +delta North = ( 0, 1) +delta South = ( 0, -1) +delta East = ( 1, 0) +delta West = (-1, 0) + +dDelta dist dir (x, y) = (x + (dist * dx), y + (dist * dy)) + where (dx, dy) = delta dir + +manhattan (x1, y1) (x2, y2) = abs (x1 - x2) + abs (y1 - y2) + + +-- | a `succ` that wraps +succW :: (Bounded a, Enum a, Eq a) => a -> a +succW dir | dir == maxBound = minBound + | otherwise = succ dir + +-- | a `pred` that wraps +predW :: (Bounded a, Enum a, Eq a) => a -> a +predW dir | dir == minBound = maxBound + | otherwise = pred dir + +-- Parse the input file + +actionsP = actionP `sepBy` endOfLine + +actionP = choice [nP, sP, eP, wP, lP, rP, fP] + +nP = N <$> ("N" *> decimal) +sP = S <$> ("S" *> decimal) +eP = E <$> ("E" *> decimal) +wP = W <$> ("W" *> decimal) +lP = L <$> ("L" *> decimal) +rP = R <$> ("R" *> decimal) +fP = F <$> ("F" *> decimal) + +successfulParse :: Text -> [Action Int] +successfulParse input = + case parseOnly actionsP input of + Left _err -> [] -- TIO.putStr $ T.pack $ parseErrorPretty err + Right actions -> actions diff --git a/data/advent12.txt b/data/advent12.txt new file mode 100644 index 0000000..a1b531b --- /dev/null +++ b/data/advent12.txt @@ -0,0 +1,787 @@ +F77 +E4 +S2 +W1 +L180 +N4 +R180 +S3 +W5 +F86 +L90 +E1 +F16 +R90 +N1 +E1 +F86 +S1 +F36 +E2 +L180 +N5 +F46 +N1 +L90 +F43 +S5 +R90 +F41 +W5 +N1 +F65 +E4 +N1 +W3 +F92 +N5 +F33 +R90 +S5 +L90 +W1 +R180 +L90 +S5 +F27 +R90 +N4 +R90 +F43 +E5 +S2 +F68 +N5 +R90 +F68 +R180 +S2 +E2 +S3 +F41 +L180 +E3 +R90 +F73 +R90 +N1 +L180 +N3 +L180 +W3 +S1 +R180 +N3 +F26 +N5 +F27 +L90 +F30 +R180 +N4 +R90 +E5 +N1 +F70 +E1 +L90 +N3 +F100 +L90 +E5 +L90 +S2 +F85 +W5 +R90 +F85 +E3 +R90 +E5 +F41 +R180 +S1 +L90 +F93 +S1 +F7 +N3 +R270 +W4 +S1 +F47 +R90 +N2 +W4 +F21 +S1 +W1 +F44 +L180 +E5 +N3 +W4 +F11 +L180 +E2 +F36 +W4 +F34 +R90 +F30 +N1 +E1 +F21 +N4 +F59 +E3 +F33 +N1 +L180 +W1 +R90 +E3 +F84 +W3 +R90 +W1 +N1 +R90 +F27 +S3 +L90 +N4 +E3 +F97 +N3 +F30 +W3 +F77 +E5 +F1 +R90 +F96 +E5 +N5 +W2 +L90 +S1 +F46 +N4 +F41 +W5 +L90 +S5 +F79 +R90 +F32 +S3 +R90 +F5 +L90 +E1 +R180 +W2 +N3 +L90 +S1 +R90 +W1 +F78 +W5 +N2 +E2 +R90 +S4 +S2 +E4 +F59 +R270 +W2 +L180 +S3 +R90 +W2 +F41 +N3 +F21 +L270 +F73 +N3 +E4 +L90 +E3 +F97 +E5 +N4 +W4 +F42 +W5 +S3 +R180 +N1 +F56 +E2 +F23 +R90 +F37 +L90 +S5 +W5 +R270 +E4 +F43 +W4 +R90 +E3 +N2 +R90 +S4 +L90 +N5 +F52 +E3 +L90 +F18 +F89 +L90 +W4 +F18 +E1 +L90 +E2 +F40 +F44 +R90 +N5 +R90 +S1 +L90 +F19 +N5 +L180 +N5 +W3 +N4 +F73 +R90 +E5 +R180 +F86 +E5 +S5 +F71 +W4 +F76 +S2 +R180 +S1 +L90 +S2 +F67 +R90 +N5 +E1 +F100 +S3 +W3 +N5 +R90 +F66 +L90 +E1 +L90 +W1 +F93 +S2 +F62 +F31 +L180 +F20 +R180 +F23 +W3 +F53 +W3 +R90 +E5 +R90 +N3 +R90 +E5 +F11 +W4 +R90 +W2 +R180 +E3 +N4 +E3 +F88 +L90 +N2 +W1 +R90 +F13 +N5 +W4 +F7 +S4 +W3 +F34 +E5 +S3 +F32 +F27 +N4 +F49 +S1 +F86 +S1 +F91 +S3 +F80 +R90 +S5 +E2 +L90 +F30 +W1 +R180 +W3 +S1 +R90 +F78 +W5 +N3 +R90 +S4 +F47 +F55 +N5 +L90 +F86 +S3 +E3 +F45 +S1 +F78 +S3 +F37 +E2 +F14 +L180 +E3 +F49 +N1 +L180 +F42 +F3 +N5 +E5 +F96 +S2 +L90 +F27 +E5 +S3 +W3 +S5 +F73 +N1 +W5 +S4 +L90 +W1 +S3 +W3 +R90 +E3 +L90 +F44 +L90 +R180 +F89 +W3 +R180 +F34 +E1 +F35 +N5 +R90 +N5 +F68 +L90 +F82 +S4 +F36 +W2 +S1 +S3 +R90 +N5 +E5 +F18 +R180 +S1 +F87 +R90 +F34 +R180 +N5 +E4 +F12 +E4 +L90 +S3 +E1 +S5 +W2 +F16 +E2 +F15 +N3 +W1 +F17 +S5 +L180 +F60 +N3 +F75 +R90 +F30 +E4 +R90 +F90 +S2 +F13 +E2 +F3 +E1 +F60 +S5 +E2 +F74 +L90 +S3 +W3 +F57 +N4 +E2 +F33 +S4 +F64 +N5 +L90 +F29 +N5 +S2 +R90 +F46 +S4 +E5 +L90 +F68 +W5 +S2 +R180 +F27 +W3 +L90 +S5 +R90 +E1 +R180 +F100 +S4 +W3 +R90 +E1 +S4 +W5 +F20 +W1 +N1 +R90 +E1 +N4 +E1 +F54 +N3 +F77 +L270 +N1 +F26 +N4 +E5 +S5 +N1 +F98 +E4 +F52 +W1 +F6 +R180 +N1 +F31 +W3 +N2 +F100 +L180 +E3 +F43 +R180 +E4 +F8 +L90 +W3 +L270 +N2 +R90 +N2 +E4 +L90 +E5 +E4 +S3 +F89 +L180 +S3 +N5 +R90 +F53 +F43 +R180 +E5 +N5 +F88 +W1 +E4 +L90 +W2 +N5 +F75 +L90 +E1 +S4 +F65 +N3 +W3 +F88 +E2 +S3 +E2 +N2 +R90 +S2 +F98 +N4 +S2 +F13 +R90 +N3 +F74 +R90 +F56 +S2 +E3 +S4 +F72 +N2 +R90 +F21 +E4 +N4 +L90 +F72 +L90 +N1 +N2 +F61 +W2 +L90 +F28 +S3 +W5 +S5 +F81 +S1 +E5 +N3 +F49 +N1 +F4 +N3 +F78 +E1 +F81 +N3 +W4 +F12 +L90 +S3 +E4 +F2 +W2 +R90 +S1 +W2 +F40 +S1 +W1 +W4 +N4 +L90 +N2 +E1 +L180 +N5 +F30 +L90 +N3 +F84 +W1 +F6 +S3 +F72 +N2 +W4 +S4 +W4 +E5 +L90 +L90 +N4 +S2 +F19 +N1 +W5 +N4 +L90 +N2 +F54 +L90 +W4 +F96 +N4 +R180 +S2 +F53 +R90 +S3 +E5 +N5 +L180 +E5 +S4 +L90 +N5 +L90 +E3 +L90 +F63 +S2 +L90 +F35 +N2 +F52 +W1 +L90 +F94 +N5 +E5 +R270 +N2 +R180 +S2 +E2 +N2 +S3 +F86 +N1 +F54 +N1 +L90 +W2 +R90 +E4 +R90 +N3 +R90 +F30 +S4 +F98 +W2 +S5 +R90 +N5 +W2 +S1 +F36 +S3 +R90 +S1 +F84 +S5 +N5 +L180 +F16 +N1 +F55 +L90 +N4 +S2 +S3 +R90 +S5 +W5 +N1 +E4 +S5 +W1 +L180 +F100 +E4 +S3 +E3 +N3 +E1 +L90 +W4 +F60 +W5 +L270 +W1 +S2 +L90 +R90 +F52 +S1 +W3 +N4 +F30 +E2 +F9 +F87 +S5 +R90 +S4 +W5 +R180 +S3 +E4 +S4 +L90 +W3 +F94 +F85 +R90 +E4 +W2 +S2 +L180 +W4 +F28 +E3 +N5 +F53 diff --git a/problems/day12.html b/problems/day12.html new file mode 100644 index 0000000..a6e479d --- /dev/null +++ b/problems/day12.html @@ -0,0 +1,173 @@ +<!DOCTYPE html> +<html lang="en-us"> +<head> +<meta charset="utf-8"/> +<title>Day 12 - 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">24*</span></div></div><div><h1 class="title-event"> <span class="title-event-wrap">/*</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.bjss.com/joinus/" target="_blank" onclick="if(ga)ga('send','event','sponsor','sidebar',this.href);" rel="noopener">BJSS</a> - Good luck all. Hoping to see some BJSSers top of the leaderboard!</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 12: Rain Risk ---</h2><p>Your ferry made decent progress toward the island, but the storm came in <span title="At least it wasn't a Category Six!">faster than anyone expected</span>. The ferry needs to take <em>evasive actions</em>!</p> +<p>Unfortunately, the ship's navigation computer seems to be malfunctioning; rather than giving a route directly to safety, it produced extremely circuitous instructions. When the captain uses the <a href="https://en.wikipedia.org/wiki/Public_address_system" target="_blank">PA system</a> to ask if anyone can help, you quickly volunteer.</p> +<p>The navigation instructions (your puzzle input) consists of a sequence of single-character <em>actions</em> paired with integer input <em>values</em>. After staring at them for a few minutes, you work out what they probably mean:</p> +<ul> +<li>Action <em><code>N</code></em> means to move <em>north</em> by the given value.</li> +<li>Action <em><code>S</code></em> means to move <em>south</em> by the given value.</li> +<li>Action <em><code>E</code></em> means to move <em>east</em> by the given value.</li> +<li>Action <em><code>W</code></em> means to move <em>west</em> by the given value.</li> +<li>Action <em><code>L</code></em> means to turn <em>left</em> the given number of degrees.</li> +<li>Action <em><code>R</code></em> means to turn <em>right</em> the given number of degrees.</li> +<li>Action <em><code>F</code></em> means to move <em>forward</em> by the given value in the direction the ship is currently facing.</li> +</ul> +<p>The ship starts by facing <em>east</em>. Only the <code>L</code> and <code>R</code> actions change the direction the ship is facing. (That is, if the ship is facing east and the next instruction is <code>N10</code>, the ship would move north 10 units, but would still move east if the following action were <code>F</code>.)</p> +<p>For example:</p> +<pre><code>F10 +N3 +F7 +R90 +F11 +</code></pre> +<p>These instructions would be handled as follows:</p> +<ul> +<li><code>F10</code> would move the ship 10 units east (because the ship starts by facing east) to <em>east 10, north 0</em>.</li> +<li><code>N3</code> would move the ship 3 units north to <em>east 10, north 3</em>.</li> +<li><code>F7</code> would move the ship another 7 units east (because the ship is still facing east) to <em>east 17, north 3</em>.</li> +<li><code>R90</code> would cause the ship to turn right by 90 degrees and face <em>south</em>; it remains at <em>east 17, north 3</em>.</li> +<li><code>F11</code> would move the ship 11 units south to <em>east 17, south 8</em>.</li> +</ul> +<p>At the end of these instructions, the ship's <a href="https://en.wikipedia.org/wiki/Manhattan_distance" target="_blank">Manhattan distance</a> (sum of the absolute values of its east/west position and its north/south position) from its starting position is <code>17 + 8</code> = <em><code>25</code></em>.</p> +<p>Figure out where the navigation instructions lead. <em>What is the Manhattan distance between that location and the ship's starting position?</em></p> +</article> +<p>Your puzzle answer was <code>1106</code>.</p><article class="day-desc"><h2 id="part2">--- Part Two ---</h2><p>Before you can give the destination to the captain, you realize that the actual action meanings were printed on the back of the instructions the whole time.</p> +<p>Almost all of the actions indicate how to move a <em>waypoint</em> which is relative to the ship's position:</p> +<ul> +<li>Action <em><code>N</code></em> means to move the waypoint <em>north</em> by the given value.</li> +<li>Action <em><code>S</code></em> means to move the waypoint <em>south</em> by the given value.</li> +<li>Action <em><code>E</code></em> means to move the waypoint <em>east</em> by the given value.</li> +<li>Action <em><code>W</code></em> means to move the waypoint <em>west</em> by the given value.</li> +<li>Action <em><code>L</code></em> means to rotate the waypoint around the ship <em>left</em> (<em>counter-clockwise</em>) the given number of degrees.</li> +<li>Action <em><code>R</code></em> means to rotate the waypoint around the ship <em>right</em> (<em>clockwise</em>) the given number of degrees.</li> +<li>Action <em><code>F</code></em> means to move <em>forward</em> to the waypoint a number of times equal to the given value.</li> +</ul> +<p>The waypoint starts <em>10 units east and 1 unit north</em> relative to the ship. The waypoint is relative to the ship; that is, if the ship moves, the waypoint moves with it.</p> +<p>For example, using the same instructions as above:</p> +<ul> +<li><code>F10</code> moves the ship to the waypoint 10 times (a total of <em>100 units east and 10 units north</em>), leaving the ship at <em>east 100, north 10</em>. The waypoint stays 10 units east and 1 unit north of the ship.</li> +<li><code>N3</code> moves the waypoint 3 units north to <em>10 units east and 4 units north of the ship</em>. The ship remains at <em>east 100, north 10</em>.</li> +<li><code>F7</code> moves the ship to the waypoint 7 times (a total of <em>70 units east and 28 units north</em>), leaving the ship at <em>east 170, north 38</em>. The waypoint stays 10 units east and 4 units north of the ship.</li> +<li><code>R90</code> rotates the waypoint around the ship clockwise 90 degrees, moving it to <em>4 units east and 10 units south of the ship</em>. The ship remains at <em>east 170, north 38</em>.</li> +<li><code>F11</code> moves the ship to the waypoint 11 times (a total of <em>44 units east and 110 units south</em>), leaving the ship at <em>east 214, south 72</em>. The waypoint stays 4 units east and 10 units south of the ship.</li> +</ul> +<p>After these operations, the ship's Manhattan distance from its starting position is <code>214 + 72</code> = <em><code>286</code></em>.</p> +<p>Figure out where the navigation instructions actually lead. <em>What is the Manhattan distance between that location and the ship's starting position?</em></p> +</article> +<p>Your puzzle answer was <code>107281</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="12/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+%22Rain+Risk%22+%2D+Day+12+%2D+Advent+of+Code+2020&url=https%3A%2F%2Fadventofcode%2Ecom%2F2020%2Fday%2F12&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+%22Rain+Risk%22+%2D+Day+12+%2D+Advent+of+Code+2020+%23AdventOfCode+https%3A%2F%2Fadventofcode%2Ecom%2F2020%2Fday%2F12'}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 daaaab9..33cb0a8 100644 --- a/stack.yaml +++ b/stack.yaml @@ -46,6 +46,7 @@ packages: - advent09 - advent10 - advent11 +- advent12 # Dependency packages to be pulled from upstream that are not in the resolver. # These entries can reference officially published versions as well as