Compare commits
No commits in common. "ef840affed6e4a78b9385009415b5000c55e4d83" and "6d79de6cbf7fa8ef595c3ab714c823af9a7d8da4" have entirely different histories.
ef840affed
...
6d79de6cbf
2
.gitignore
vendored
2
.gitignore
vendored
@ -4,8 +4,6 @@ test
|
|||||||
p2.py
|
p2.py
|
||||||
r/*
|
r/*
|
||||||
|
|
||||||
.meta
|
|
||||||
|
|
||||||
.aoc.secret
|
.aoc.secret
|
||||||
|
|
||||||
.answers.log
|
.answers.log
|
||||||
|
63
2015/01/1.md
63
2015/01/1.md
@ -1,63 +0,0 @@
|
|||||||
## \-\-- 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).
|
|
@ -1,17 +0,0 @@
|
|||||||
#!/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
70
2015/07/7.md
@ -1,70 +0,0 @@
|
|||||||
## \-\-- 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
62
2016/01/1.md
@ -1,62 +0,0 @@
|
|||||||
## \-\-- 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).
|
|
@ -1,84 +0,0 @@
|
|||||||
#!/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
24
solution.py
@ -1,24 +0,0 @@
|
|||||||
#!/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