Programming, Language: Racket

All posts

Recent posts

AoC 2018 Day 14: Functionally Circular Elfs

Source: Chocolate Charts

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.

read more...


AoC 2018 Day 13: Mine Cart Madness

Source: Mine Cart Madness

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.

read more...


AoC 2018 Day 9: Marble Madness

Source: Marble Mania

Part 1: Place marbles in a circle such that each marble is placed by skipping one place except for marbles divisible by 23. For those, don’t place them, skip back 7 places, and remove that marble as well. Add these two marbles to your current score.

Given a specific player count and last marble, what’s the highest score?

read more...