Compare commits
3 Commits
6d79de6cbf
...
ef840affed
Author | SHA1 | Date | |
---|---|---|---|
ef840affed | |||
7b23e4ab4b | |||
f57441f092 |
2
.gitignore
vendored
2
.gitignore
vendored
@ -4,6 +4,8 @@ test
|
|||||||
p2.py
|
p2.py
|
||||||
r/*
|
r/*
|
||||||
|
|
||||||
|
.meta
|
||||||
|
|
||||||
.aoc.secret
|
.aoc.secret
|
||||||
|
|
||||||
.answers.log
|
.answers.log
|
||||||
|
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).
|
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