forward N
, down N
, and up N
that move forward, increase depth, and decrease depth in that order. Calculate the product of the final position and depth.Been a while since I’ve done an advent of code! I’ll probably backfill a few years eventually, but for now, let’s just write some code!
As always, these problems are wonderful to try to solve yourself. If you agree, stop reading now. This post isn’t going anywhere.
If you’d like to see the full form of any particular solution, you can do so on GitHub (including previous years and possibly some I haven’t written up yet): jpverkamp/advent-of-code
Part 1: Create an infinite stream of numbers, by starting with [3, 7] with two pointers: 0 and 1. To add values to the list:
- Add the current values of the two pointers
- If the value is less than ten, add that value to the end of the list
- If the value is greater or equal to ten, add 1 and then the ones digits to the end of the list
- Update each pointer by adding the value it is pointing at to its current index plus one
With that algorithm, find the ten digits after a given index.
Part 1: Load a minecart track that looks like this:
/->-\
| | /—-
| /-+–+-\ |
| | | | v |
-+-/ -+–/
-—–/
> Assuming minecarts follow the tracks and alternate turning left, going straight, and turning right on each intersection (`+`), where does the first collision occur?
> NOTE: Update carts top to bottom, left to right. Carts can collide mid update.
Okay. It's an interesting data format problem mostly. And we have to deal a bit with not being imperative, in particular when we're doing the updates, since having collisions happen halfway through an update is not so great. Let's load it:
```racket
(struct point (x y) #:transparent)
(struct cart (location velocity next-turn) #:transparent)
(struct track (data carts top-left bottom-right) #:transparent)
The goal will be to load the tracks into a hash of point
to character (so I know how the track turns / intersects) and separately store the carts. I’ll want to process the track after the initial load to replace carts with their underlying track and get the initial velocity as well. Finally, next-turn
will always start as 'left
, but we’ll deal with that later.
Part 1: Create an infinite 2D cellular automaton with transition rules based on two points to each side, starting with initial state at index 0 to the right.
After 20 generations, what is the sum of indexes of points turned on?
Part 1: Define a grid as follows (x,y coordinates + a constant C):
- r(x) = x + 10
- G(x, y) = hundreds(r(x) * (r(x) * y + C)) - 5
Find the 3x3 area in a 300x300 grid with the highest total G(x, y) .
Part 1: Given a system of moving particles (with position and velocity) find the point where the particles spell a message. What is that message?