AoC 2023 Day 12: Question Markinator

Source: Day 12: Hot Springs

Full solution for today (spoilers!)

Part 1

Given a sequence of #.? as on, off, and unknown and a sequence of group sizes, determine how many possible arrangements there are that match the given groups.

More specifically, if you have ???.## 1,2 you need a single # and a set of two ##, there are three possibilities: #...###, .#..###, and ..#.###.

read more...


AoC 2023 Day 7: Pokinator

Source: Day 7: Camel Cards

Full solution for today (spoilers!)

Part 1

Simulate a limited poker game with no suits and break otherwise tied hands lexicographically (AAAA2 beats AKAAA) because the the hands are both four of a kind, the first cards are both A, but the second A beats the K. It doesn’t matter that the first hand’s off card was a 2

Order all hands then calculate the sum of the ordering of hands (1 for best etc) times the bet for each.

read more...


AoC 2023 Day 5: Growinator

Source: Day 5: If You Give A Seed A Fertilizer

Full solution for today (spoilers!)

Part 1

You are given a set of initial values (seeds) and a series of range maps (where a range of numbers src..src+len maps to dst..dst+len). Apply each range map in tur, return the lowest resulting value.

read more...


AoC 2023 Day 4: Scratchinator

Source: Day 4: Scratchcards

Full solution for today (spoilers!). Note: I did slightly change my solutions template after writing this blog post, so the final solution is structured slightly differently than the code in this post. The functionality itself hasn’t changed.

Part 1

Simulate scratchcards. Given a list of winning numbers and guessed numbers, count how many guessed numbers are in the winning list. Your score is 1, 2, 4, 8, … for 1, 2, 3, 4, … matching numbers.

read more...


AoC 2023 Day 3: Gearinator

Source: Day 3: Gear Ratios

Full solution for today (spoilers!). Note: I did slightly change my solutions template after writing this blog post, so the final solution is structured slightly differently than the code in this post. The functionality itself hasn’t changed.

Part 1

Take as input a 2D grid of numbers or symbols (. represents empty space). Numbers will be 1 or more digits written horizontally which should be concatenated (.467* is the number 467 followed by the symbol *).

Sum all numbers that are adjacent (including diagonally) to at least one symbol.

read more...