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
|
||||
r/*
|
||||
|
||||
.meta
|
||||
|
||||
.aoc.secret
|
||||
|
||||
.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