Added template and 2016
This commit is contained in:
parent
f57441f092
commit
7b23e4ab4b
63
2015/01/1.md
Normal file
63
2015/01/1.md
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
## \-\-- Day 1: Not Quite Lisp \-\--
|
||||||
|
|
||||||
|
Santa was hoping for a white Christmas, but his weather machine\'s
|
||||||
|
\"snow\" function is powered by stars, and he\'s fresh out! To save
|
||||||
|
Christmas, he needs you to collect *fifty stars* by December 25th.
|
||||||
|
|
||||||
|
Collect stars by helping Santa solve puzzles. Two puzzles will be made
|
||||||
|
available on each day in the Advent calendar; the second puzzle is
|
||||||
|
unlocked when you complete the first. Each puzzle grants *one star*.
|
||||||
|
[Good
|
||||||
|
luck!]{title="Also, some puzzles contain Easter eggs like this one. Yes, I know it's not traditional to do Advent calendars for Easter."}
|
||||||
|
|
||||||
|
Here\'s an easy puzzle to warm you up.
|
||||||
|
|
||||||
|
Santa is trying to deliver presents in a large apartment building, but
|
||||||
|
he can\'t find the right floor - the directions he got are a little
|
||||||
|
confusing. He starts on the ground floor (floor `0`) and then follows
|
||||||
|
the instructions one character at a time.
|
||||||
|
|
||||||
|
An opening parenthesis, `(`, means he should go up one floor, and a
|
||||||
|
closing parenthesis, `)`, means he should go down one floor.
|
||||||
|
|
||||||
|
The apartment building is very tall, and the basement is very deep; he
|
||||||
|
will never find the top or bottom floors.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
- `(())` and `()()` both result in floor `0`.
|
||||||
|
- `(((` and `(()(()(` both result in floor `3`.
|
||||||
|
- `))(((((` also results in floor `3`.
|
||||||
|
- `())` and `))(` both result in floor `-1` (the first basement
|
||||||
|
level).
|
||||||
|
- `)))` and `)())())` both result in floor `-3`.
|
||||||
|
|
||||||
|
To *what floor* do the instructions take Santa?
|
||||||
|
|
||||||
|
Your puzzle answer was `232`.
|
||||||
|
|
||||||
|
## \-\-- Part Two \-\-- {#part2}
|
||||||
|
|
||||||
|
Now, given the same instructions, find the *position* of the first
|
||||||
|
character that causes him to enter the basement (floor `-1`). The first
|
||||||
|
character in the instructions has position `1`, the second character has
|
||||||
|
position `2`, and so on.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
- `)` causes him to enter the basement at character position `1`.
|
||||||
|
- `()())` causes him to enter the basement at character position `5`.
|
||||||
|
|
||||||
|
What is the *position* of the character that causes Santa to first enter
|
||||||
|
the basement?
|
||||||
|
|
||||||
|
Your puzzle answer was `1783`.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars:
|
||||||
|
\*\*
|
||||||
|
|
||||||
|
At this point, you should [return to your Advent calendar](/2015) and
|
||||||
|
try another puzzle.
|
||||||
|
|
||||||
|
If you still want to see it, you can [get your puzzle
|
||||||
|
input](1/input).
|
111
2015/01/debug-full-aoc-response.html
Normal file
111
2015/01/debug-full-aoc-response.html
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en-us">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8"/>
|
||||||
|
<title>Day 1 - Advent of Code 2015</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="/static/style.css?31"/>
|
||||||
|
<link rel="stylesheet alternate" type="text/css" href="/static/highcontrast.css?1" title="High Contrast"/>
|
||||||
|
<link rel="shortcut icon" href="/favicon.png"/>
|
||||||
|
<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>
|
||||||
|
</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@hachyderm.io on Mastodon and
|
||||||
|
@ericwastl on Twitter.
|
||||||
|
|
||||||
|
- Eric Wastl
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-->
|
||||||
|
<body>
|
||||||
|
<header><div><h1 class="title-global"><a href="/">Advent of Code</a></h1><nav><ul><li><a href="/2015/about">[About]</a></li><li><a href="/2015/events">[Events]</a></li><li><a href="https://teespring.com/stores/advent-of-code" target="_blank">[Shop]</a></li><li><a href="/2015/settings">[Settings]</a></li><li><a href="/2015/auth/logout">[Log Out]</a></li></ul></nav><div class="user">Frederik Baerentsen <span class="star-count">11*</span></div></div><div><h1 class="title-event"> <span class="title-event-wrap">$year=</span><a href="/2015">2015</a><span class="title-event-wrap">;</span></h1><nav><ul><li><a href="/2015">[Calendar]</a></li><li><a href="/2015/support">[AoC++]</a></li><li><a href="/2015/sponsors">[Sponsors]</a></li><li><a href="/2015/leaderboard">[Leaderboard]</a></li><li><a href="/2015/stats">[Stats]</a></li></ul></nav></div></header>
|
||||||
|
|
||||||
|
<div id="sidebar">
|
||||||
|
</div><!--/sidebar-->
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<article><p>You don't seem to be solving the right level. Did you already complete it? <a href="/2015/day/1">[Return to Day 1]</a></p></article>
|
||||||
|
</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>
|
17
2015/01/part1.py
Normal file
17
2015/01/part1.py
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#!/bin/python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
|
input_f = sys.argv[1]
|
||||||
|
|
||||||
|
result = 0
|
||||||
|
|
||||||
|
with open(input_f) as file:
|
||||||
|
for line in file:
|
||||||
|
for idx,i in enumerate(line):
|
||||||
|
if i == '(':
|
||||||
|
result += 1
|
||||||
|
if i == ')':
|
||||||
|
result -= 1
|
||||||
|
print(result)
|
70
2015/07/7.md
Normal file
70
2015/07/7.md
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
## \-\-- Day 7: Some Assembly Required \-\--
|
||||||
|
|
||||||
|
This year, Santa brought little Bobby Tables a set of wires and [bitwise
|
||||||
|
logic gates](https://en.wikipedia.org/wiki/Bitwise_operation)!
|
||||||
|
Unfortunately, little Bobby is a little under the recommended age range,
|
||||||
|
and he needs help [assembling the
|
||||||
|
circuit]{title="You had one of these as a kid, right?"}.
|
||||||
|
|
||||||
|
Each wire has an identifier (some lowercase letters) and can carry a
|
||||||
|
[16-bit](https://en.wikipedia.org/wiki/16-bit) signal (a number from `0`
|
||||||
|
to `65535`). A signal is provided to each wire by a gate, another wire,
|
||||||
|
or some specific value. Each wire can only get a signal from one source,
|
||||||
|
but can provide its signal to multiple destinations. A gate provides no
|
||||||
|
signal until all of its inputs have a signal.
|
||||||
|
|
||||||
|
The included instructions booklet describes how to connect the parts
|
||||||
|
together: `x AND y -> z` means to connect wires `x` and `y` to an AND
|
||||||
|
gate, and then connect its output to wire `z`.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
- `123 -> x` means that the signal `123` is provided to wire `x`.
|
||||||
|
- `x AND y -> z` means that the [bitwise
|
||||||
|
AND](https://en.wikipedia.org/wiki/Bitwise_operation#AND) of wire
|
||||||
|
`x` and wire `y` is provided to wire `z`.
|
||||||
|
- `p LSHIFT 2 -> q` means that the value from wire `p` is
|
||||||
|
[left-shifted](https://en.wikipedia.org/wiki/Logical_shift) by `2`
|
||||||
|
and then provided to wire `q`.
|
||||||
|
- `NOT e -> f` means that the [bitwise
|
||||||
|
complement](https://en.wikipedia.org/wiki/Bitwise_operation#NOT) of
|
||||||
|
the value from wire `e` is provided to wire `f`.
|
||||||
|
|
||||||
|
Other possible gates include `OR` ([bitwise
|
||||||
|
OR](https://en.wikipedia.org/wiki/Bitwise_operation#OR)) and `RSHIFT`
|
||||||
|
([right-shift](https://en.wikipedia.org/wiki/Logical_shift)). If, for
|
||||||
|
some reason, you\'d like to *emulate* the circuit instead, almost all
|
||||||
|
programming languages (for example,
|
||||||
|
[C](https://en.wikipedia.org/wiki/Bitwise_operations_in_C),
|
||||||
|
[JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators),
|
||||||
|
or [Python](https://wiki.python.org/moin/BitwiseOperators)) provide
|
||||||
|
operators for these gates.
|
||||||
|
|
||||||
|
For example, here is a simple circuit:
|
||||||
|
|
||||||
|
123 -> x
|
||||||
|
456 -> y
|
||||||
|
x AND y -> d
|
||||||
|
x OR y -> e
|
||||||
|
x LSHIFT 2 -> f
|
||||||
|
y RSHIFT 2 -> g
|
||||||
|
NOT x -> h
|
||||||
|
NOT y -> i
|
||||||
|
|
||||||
|
After it is run, these are the signals on the wires:
|
||||||
|
|
||||||
|
d: 72
|
||||||
|
e: 507
|
||||||
|
f: 492
|
||||||
|
g: 114
|
||||||
|
h: 65412
|
||||||
|
i: 65079
|
||||||
|
x: 123
|
||||||
|
y: 456
|
||||||
|
|
||||||
|
In little Bobby\'s kit\'s instructions booklet (provided as your puzzle
|
||||||
|
input), what signal is ultimately provided to *wire `a`*?
|
||||||
|
|
||||||
|
To begin, [get your puzzle input](7/input).
|
||||||
|
|
||||||
|
Answer:
|
62
2016/01/1.md
Normal file
62
2016/01/1.md
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
## \-\-- Day 1: No Time for a Taxicab \-\--
|
||||||
|
|
||||||
|
Santa\'s sleigh uses a [very high-precision
|
||||||
|
clock]{title="An atomic clock is too inaccurate; he might end up in a wall!"}
|
||||||
|
to guide its movements, and the clock\'s oscillator is regulated by
|
||||||
|
stars. Unfortunately, the stars have been stolen\... by the Easter
|
||||||
|
Bunny. To save Christmas, Santa needs you to retrieve all *fifty stars*
|
||||||
|
by December 25th.
|
||||||
|
|
||||||
|
Collect stars by solving puzzles. Two puzzles will be made available on
|
||||||
|
each day in the Advent calendar; the second puzzle is unlocked when you
|
||||||
|
complete the first. Each puzzle grants *one star*. Good luck!
|
||||||
|
|
||||||
|
You\'re airdropped near *Easter Bunny Headquarters* in a city somewhere.
|
||||||
|
\"Near\", unfortunately, is as close as you can get - the instructions
|
||||||
|
on the Easter Bunny Recruiting Document the Elves intercepted start
|
||||||
|
here, and nobody had time to work them out further.
|
||||||
|
|
||||||
|
The Document indicates that you should start at the given coordinates
|
||||||
|
(where you just landed) and face North. Then, follow the provided
|
||||||
|
sequence: either turn left (`L`) or right (`R`) 90 degrees, then walk
|
||||||
|
forward the given number of blocks, ending at a new intersection.
|
||||||
|
|
||||||
|
There\'s no time to follow such ridiculous instructions on foot, though,
|
||||||
|
so you take a moment and work out the destination. Given that you can
|
||||||
|
only walk on the [street grid of the
|
||||||
|
city](https://en.wikipedia.org/wiki/Taxicab_geometry), how far is the
|
||||||
|
shortest path to the destination?
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
- Following `R2, L3` leaves you `2` blocks East and `3` blocks North,
|
||||||
|
or `5` blocks away.
|
||||||
|
- `R2, R2, R2` leaves you `2` blocks due South of your starting
|
||||||
|
position, which is `2` blocks away.
|
||||||
|
- `R5, L5, R5, R3` leaves you `12` blocks away.
|
||||||
|
|
||||||
|
*How many blocks away* is Easter Bunny HQ?
|
||||||
|
|
||||||
|
Your puzzle answer was `236`.
|
||||||
|
|
||||||
|
## \-\-- Part Two \-\-- {#part2}
|
||||||
|
|
||||||
|
Then, you notice the instructions continue on the back of the Recruiting
|
||||||
|
Document. Easter Bunny HQ is actually at the first location you visit
|
||||||
|
twice.
|
||||||
|
|
||||||
|
For example, if your instructions are `R8, R4, R4, R8`, the first
|
||||||
|
location you visit twice is `4` blocks away, due East.
|
||||||
|
|
||||||
|
How many blocks away is the *first location you visit twice*?
|
||||||
|
|
||||||
|
Your puzzle answer was `182`.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars:
|
||||||
|
\*\*
|
||||||
|
|
||||||
|
At this point, you should [return to your Advent calendar](/2016) and
|
||||||
|
try another puzzle.
|
||||||
|
|
||||||
|
If you still want to see it, you can [get your puzzle
|
||||||
|
input](1/input).
|
84
2016/01/solution.py
Normal file
84
2016/01/solution.py
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
#!/bin/python3
|
||||||
|
import sys
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
|
# Read instructions from file
|
||||||
|
with open("input", "r") as file:
|
||||||
|
instructions = file.read().strip().split(", ")
|
||||||
|
|
||||||
|
|
||||||
|
#########################################
|
||||||
|
# #
|
||||||
|
# Part 1 #
|
||||||
|
# #
|
||||||
|
#########################################
|
||||||
|
|
||||||
|
# Define directions and movements in terms of (x, y) vectors
|
||||||
|
directions = [(0, 1), (1, 0), (0, -1), (-1, 0)] # North, East, South, West
|
||||||
|
|
||||||
|
# Starting position and direction
|
||||||
|
x, y = 0, 0
|
||||||
|
current_direction = 0 # Start facing North (index 0 in directions)
|
||||||
|
|
||||||
|
# Process each instruction
|
||||||
|
for instruction in instructions:
|
||||||
|
turn, steps = instruction[0], int(instruction[1:])
|
||||||
|
|
||||||
|
# Update direction based on the turn
|
||||||
|
if turn == 'R':
|
||||||
|
current_direction = (current_direction + 1) % 4 # Turn right
|
||||||
|
elif turn == 'L':
|
||||||
|
current_direction = (current_direction - 1) % 4 # Turn left
|
||||||
|
|
||||||
|
# Move in the current direction
|
||||||
|
dx, dy = directions[current_direction]
|
||||||
|
x += dx * steps
|
||||||
|
y += dy * steps
|
||||||
|
|
||||||
|
# Calculate Manhattan distance from the origin
|
||||||
|
distance = abs(x) + abs(y)
|
||||||
|
print(distance)
|
||||||
|
|
||||||
|
|
||||||
|
#########################################
|
||||||
|
# #
|
||||||
|
# Part 2 #
|
||||||
|
# #
|
||||||
|
#########################################
|
||||||
|
|
||||||
|
|
||||||
|
# Define directions and movements in terms of (x, y) vectors
|
||||||
|
directions = [(0, 1), (1, 0), (0, -1), (-1, 0)] # North, East, South, West
|
||||||
|
|
||||||
|
# Starting position and direction
|
||||||
|
x, y = 0, 0
|
||||||
|
current_direction = 0 # Start facing North (index 0 in directions)
|
||||||
|
visited = set() # To track visited positions
|
||||||
|
visited.add((x, y)) # Starting point is visited
|
||||||
|
|
||||||
|
# Read instructions from file
|
||||||
|
with open("input", "r") as file:
|
||||||
|
instructions = file.read().strip().split(", ")
|
||||||
|
|
||||||
|
# Process each instruction
|
||||||
|
for instruction in instructions:
|
||||||
|
turn, steps = instruction[0], int(instruction[1:])
|
||||||
|
|
||||||
|
# Update direction based on the turn
|
||||||
|
if turn == 'R':
|
||||||
|
current_direction = (current_direction + 1) % 4 # Turn right
|
||||||
|
elif turn == 'L':
|
||||||
|
current_direction = (current_direction - 1) % 4 # Turn left
|
||||||
|
|
||||||
|
# Move step by step in the current direction
|
||||||
|
dx, dy = directions[current_direction]
|
||||||
|
for _ in range(steps):
|
||||||
|
x += dx
|
||||||
|
y += dy
|
||||||
|
if (x, y) in visited:
|
||||||
|
# Found the first location visited twice
|
||||||
|
distance = abs(x) + abs(y)
|
||||||
|
print(distance)
|
||||||
|
exit()
|
||||||
|
visited.add((x, y))
|
||||||
|
|
24
solution.py
Normal file
24
solution.py
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/python3
|
||||||
|
import sys
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
|
input_f = "input" #sys.argv[1]
|
||||||
|
|
||||||
|
with open(input_f) as file:
|
||||||
|
for line in file:
|
||||||
|
|
||||||
|
|
||||||
|
#########################################
|
||||||
|
# #
|
||||||
|
# Part 1 #
|
||||||
|
# #
|
||||||
|
#########################################
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#########################################
|
||||||
|
# #
|
||||||
|
# Part 2 #
|
||||||
|
# #
|
||||||
|
#########################################
|
Loading…
Reference in New Issue
Block a user