diff --git a/2024/day07/problem b/2024/day07/problem new file mode 100644 index 0000000..c6cb037 --- /dev/null +++ b/2024/day07/problem @@ -0,0 +1,119 @@ +Advent of Code + +--- Day 7: Bridge Repair --- + + The Historians take you to a familiar [16]rope bridge over a river in the + middle of a jungle. The Chief isn't on this side of the bridge, though; + maybe he's on the other side? + + When you go to cross the bridge, you notice a group of engineers trying to + repair it. (Apparently, it breaks pretty frequently.) You won't be able to + cross until it's fixed. + + You ask how long it'll take; the engineers tell you that it only needs + final calibrations, but some young elephants were playing nearby and stole + all the operators from their calibration equations! They could finish the + calibrations if only someone could determine which test values could + possibly be produced by placing any combination of operators into their + calibration equations (your puzzle input). + + For example: + + 190: 10 19 + 3267: 81 40 27 + 83: 17 5 + 156: 15 6 + 7290: 6 8 6 15 + 161011: 16 10 13 + 192: 17 8 14 + 21037: 9 7 18 13 + 292: 11 6 16 20 + + Each line represents a single equation. The test value appears before the + colon on each line; it is your job to determine whether the remaining + numbers can be combined with operators to produce the test value. + + Operators are always evaluated left-to-right, not according to precedence + rules. Furthermore, numbers in the equations cannot be rearranged. + Glancing into the jungle, you can see elephants holding two different + types of operators: add (+) and multiply (*). + + Only three of the above equations can be made true by inserting operators: + + • 190: 10 19 has only one position that accepts an operator: between 10 + and 19. Choosing + would give 29, but choosing * would give the test + value (10 * 19 = 190). + • 3267: 81 40 27 has two positions for operators. Of the four possible + configurations of the operators, two cause the right side to match the + test value: 81 + 40 * 27 and 81 * 40 + 27 both equal 3267 (when + evaluated left-to-right)! + • 292: 11 6 16 20 can be solved in exactly one way: 11 + 6 * 16 + 20. + + The engineers just need the total calibration result, which is the sum of + the test values from just the equations that could possibly be true. In + the above example, the sum of the test values for the three equations + listed above is 3749. + + Determine which equations could possibly be true. What is their total + calibration result? + + Your puzzle answer was 5030892084481. + +--- Part Two --- + + The engineers seem concerned; the total calibration result you gave them + is nowhere close to being within safety tolerances. Just then, you spot + your mistake: some well-hidden elephants are holding a third type of + operator. + + The [17]concatenation operator (||) combines the digits from its left and + right inputs into a single number. For example, 12 || 345 would become + 12345. All operators are still evaluated left-to-right. + + Now, apart from the three equations that could be made true using only + addition and multiplication, the above example has three more equations + that can be made true by inserting operators: + + • 156: 15 6 can be made true through a single concatenation: 15 || 6 = + 156. + • 7290: 6 8 6 15 can be made true using 6 * 8 || 6 * 15. + • 192: 17 8 14 can be made true using 17 || 8 + 14. + + Adding up all six test values (the three that could be made before using + only + and * plus the new three that can now be made by also using ||) + produces the new total calibration result of 11387. + + Using your new knowledge of elephant hiding spots, determine which + equations could possibly be true. What is their total calibration result? + + Your puzzle answer was 91377448644679. + + Both parts of this puzzle are complete! They provide two gold stars: ** + + At this point, you should [18]return to your Advent calendar and try + another puzzle. + + If you still want to see it, you can [19]get your puzzle input. + + You can also [Shareon [20]Bluesky [21]Twitter [22]Mastodon] this puzzle. + +References + + Visible links + 1. https://adventofcode.com/ + 2. https://adventofcode.com/2024/about + 3. https://adventofcode.com/2024/events + 4. https://cottonbureau.com/people/advent-of-code + 5. https://adventofcode.com/2024/settings + 6. https://adventofcode.com/2024/auth/logout + 7. Advent of Code Supporter + https://adventofcode.com/2024/support + 8. https://adventofcode.com/2024 + 9. https://adventofcode.com/2024 + 10. https://adventofcode.com/2024/support + 12. https://adventofcode.com/2024/leaderboard + 13. https://adventofcode.com/2024/stats + 16. https://adventofcode.com/2022/day/9 + 17. https://en.wikipedia.org/wiki/Concatenation + 18. https://adventofcode.com/2024 + 19. https://adventofcode.com/2024/day/7/input diff --git a/2024/day08/problem b/2024/day08/problem new file mode 100644 index 0000000..79080db --- /dev/null +++ b/2024/day08/problem @@ -0,0 +1,186 @@ +Advent of Code + +--- Day 8: Resonant Collinearity --- + + You find yourselves on the [16]roof of a top-secret Easter Bunny + installation. + + While The Historians do their thing, you take a look at the familiar huge + antenna. Much to your surprise, it seems to have been reconfigured to emit + a signal that makes people 0.1% more likely to buy Easter Bunny brand + Imitation Mediocre Chocolate as a Christmas gift! Unthinkable! + + Scanning across the city, you find that there are actually many such + antennas. Each antenna is tuned to a specific frequency indicated by a + single lowercase letter, uppercase letter, or digit. You create a map + (your puzzle input) of these antennas. For example: + + ............ + ........0... + .....0...... + .......0.... + ....0....... + ......A..... + ............ + ............ + ........A... + .........A.. + ............ + ............ + + The signal only applies its nefarious effect at specific antinodes based + on the resonant frequencies of the antennas. In particular, an antinode + occurs at any point that is perfectly in line with two antennas of the + same frequency - but only when one of the antennas is twice as far away as + the other. This means that for any pair of antennas with the same + frequency, there are two antinodes, one on either side of them. + + So, for these two antennas with frequency a, they create the two antinodes + marked with #: + + .......... + ...#...... + .......... + ....a..... + .......... + .....a.... + .......... + ......#... + .......... + .......... + + Adding a third antenna with the same frequency creates several more + antinodes. It would ideally add four antinodes, but two are off the right + side of the map, so instead it adds only two: + + .......... + ...#...... + #......... + ....a..... + ........a. + .....a.... + ..#....... + ......#... + .......... + .......... + + Antennas with different frequencies don't create antinodes; A and a count + as different frequencies. However, antinodes can occur at locations that + contain antennas. In this diagram, the lone antenna with frequency capital + A creates no antinodes but has a lowercase-a-frequency antinode at its + location: + + .......... + ...#...... + #......... + ....a..... + ........a. + .....a.... + ..#....... + ......A... + .......... + .......... + + The first example has antennas with two different frequencies, so the + antinodes they create look like this, plus an antinode overlapping the + topmost A-frequency antenna: + + ......#....# + ...#....0... + ....#0....#. + ..#....0.... + ....0....#.. + .#....A..... + ...#........ + #......#.... + ........A... + .........A.. + ..........#. + ..........#. + + Because the topmost A-frequency antenna overlaps with a 0-frequency + antinode, there are 14 total unique locations that contain an antinode + within the bounds of the map. + + Calculate the impact of the signal. How many unique locations within the + bounds of the map contain an antinode? + + Your puzzle answer was 311. + +--- Part Two --- + + Watching over your shoulder as you work, one of The Historians asks if you + took the effects of resonant harmonics into your calculations. + + Whoops! + + After updating your model, it turns out that an antinode occurs at any + grid position exactly in line with at least two antennas of the same + frequency, regardless of distance. This means that some of the new + antinodes will occur at the position of each antenna (unless that antenna + is the only one of its frequency). + + So, these three T-frequency antennas now create many antinodes: + + T....#.... + ...T...... + .T....#... + .........# + ..#....... + .......... + ...#...... + .......... + ....#..... + .......... + + In fact, the three T-frequency antennas are all exactly in line with two + antennas, so they are all also antinodes! This brings the total number of + antinodes in the above example to 9. + + The original example now has 34 antinodes, including the antinodes that + appear on every antenna: + + ##....#....# + .#.#....0... + ..#.#0....#. + ..##...0.... + ....0....#.. + .#...#A....# + ...#..#..... + #....#.#.... + ..#.....A... + ....#....A.. + .#........#. + ...#......## + + Calculate the impact of the signal using this updated model. How many + unique locations within the bounds of the map contain an antinode? + + Your puzzle answer was 1115. + + Both parts of this puzzle are complete! They provide two gold stars: ** + + At this point, you should [17]return to your Advent calendar and try + another puzzle. + + If you still want to see it, you can [18]get your puzzle input. + +References + + Visible links + 1. https://adventofcode.com/ + 2. https://adventofcode.com/2024/about + 3. https://adventofcode.com/2024/events + 4. https://cottonbureau.com/people/advent-of-code + 5. https://adventofcode.com/2024/settings + 6. https://adventofcode.com/2024/auth/logout + 7. Advent of Code Supporter + https://adventofcode.com/2024/support + 8. https://adventofcode.com/2024 + 9. https://adventofcode.com/2024 + 10. https://adventofcode.com/2024/support + 12. https://adventofcode.com/2024/leaderboard + 13. https://adventofcode.com/2024/stats + 16. https://adventofcode.com/2016/day/25 + 17. https://adventofcode.com/2024 + 18. https://adventofcode.com/2024/day/8/input diff --git a/2024/day09/problem b/2024/day09/problem new file mode 100644 index 0000000..2210ef5 --- /dev/null +++ b/2024/day09/problem @@ -0,0 +1,146 @@ +Advent of Code + +--- Day 9: Disk Fragmenter --- + + Another push of the button leaves you in the familiar hallways of some + friendly [16]amphipods! Good thing you each somehow got your own personal + mini submarine. The Historians jet away in search of the Chief, mostly by + driving directly into walls. + + While The Historians quickly figure out how to pilot these things, you + notice an amphipod in the corner struggling with his computer. He's trying + to make more contiguous free space by compacting all of the files, but his + program isn't working; you offer to help. + + He shows you the disk map (your puzzle input) he's already generated. For + example: + + 2333133121414131402 + + The disk map uses a dense format to represent the layout of files and free + space on the disk. The digits alternate between indicating the length of a + file and the length of free space. + + So, a disk map like 12345 would represent a one-block file, two blocks of + free space, a three-block file, four blocks of free space, and then a + five-block file. A disk map like 90909 would represent three nine-block + files in a row (with no free space between them). + + Each file on disk also has an ID number based on the order of the files as + they appear before they are rearranged, starting with ID 0. So, the disk + map 12345 has three files: a one-block file with ID 0, a three-block file + with ID 1, and a five-block file with ID 2. Using one character for each + block where digits are the file ID and . is free space, the disk map 12345 + represents these individual blocks: + + 0..111....22222 + + The first example above, 2333133121414131402, represents these individual + blocks: + + 00...111...2...333.44.5555.6666.777.888899 + + The amphipod would like to move file blocks one at a time from the end of + the disk to the leftmost free space block (until there are no gaps + remaining between file blocks). For the disk map 12345, the process looks + like this: + + 0..111....22222 + 02.111....2222. + 022111....222.. + 0221112...22... + 02211122..2.... + 022111222...... + + The first example requires a few more steps: + + 00...111...2...333.44.5555.6666.777.888899 + 009..111...2...333.44.5555.6666.777.88889. + 0099.111...2...333.44.5555.6666.777.8888.. + 00998111...2...333.44.5555.6666.777.888... + 009981118..2...333.44.5555.6666.777.88.... + 0099811188.2...333.44.5555.6666.777.8..... + 009981118882...333.44.5555.6666.777....... + 0099811188827..333.44.5555.6666.77........ + 00998111888277.333.44.5555.6666.7......... + 009981118882777333.44.5555.6666........... + 009981118882777333644.5555.666............ + 00998111888277733364465555.66............. + 0099811188827773336446555566.............. + + The final step of this file-compacting process is to update the filesystem + checksum. To calculate the checksum, add up the result of multiplying each + of these blocks' position with the file ID number it contains. The + leftmost block is in position 0. If a block contains free space, skip it + instead. + + Continuing the first example, the first few blocks' position multiplied by + its file ID number are 0 * 0 = 0, 1 * 0 = 0, 2 * 9 = 18, 3 * 9 = 27, 4 * 8 + = 32, and so on. In this example, the checksum is the sum of these, 1928. + + Compact the amphipod's hard drive using the process he requested. What is + the resulting filesystem checksum? (Be careful copy/pasting the input for + this puzzle; it is a single, very long line.) + + Your puzzle answer was 6211348208140. + +--- Part Two --- + + Upon completion, two things immediately become clear. First, the disk + definitely has a lot more contiguous free space, just like the amphipod + hoped. Second, the computer is running much more slowly! Maybe introducing + all of that [17]file system fragmentation was a bad idea? + + The eager amphipod already has a new plan: rather than move individual + blocks, he'd like to try compacting the files on his disk by moving whole + files instead. + + This time, attempt to move whole files to the leftmost span of free space + blocks that could fit the file. Attempt to move each file exactly once in + order of decreasing file ID number starting with the file with the highest + file ID number. If there is no span of free space to the left of a file + that is large enough to fit the file, the file does not move. + + The first example from above now proceeds differently: + + 00...111...2...333.44.5555.6666.777.888899 + 0099.111...2...333.44.5555.6666.777.8888.. + 0099.1117772...333.44.5555.6666.....8888.. + 0099.111777244.333....5555.6666.....8888.. + 00992111777.44.333....5555.6666.....8888.. + + The process of updating the filesystem checksum is the same; now, this + example's checksum would be 2858. + + Start over, now compacting the amphipod's hard drive using this new method + instead. What is the resulting filesystem checksum? + + Your puzzle answer was 6239783302560. + + Both parts of this puzzle are complete! They provide two gold stars: ** + + At this point, you should [18]return to your Advent calendar and try + another puzzle. + + If you still want to see it, you can [19]get your puzzle input. + +References + + Visible links + 1. https://adventofcode.com/ + 2. https://adventofcode.com/2024/about + 3. https://adventofcode.com/2024/events + 4. https://cottonbureau.com/people/advent-of-code + 5. https://adventofcode.com/2024/settings + 6. https://adventofcode.com/2024/auth/logout + 7. Advent of Code Supporter + https://adventofcode.com/2024/support + 8. https://adventofcode.com/2024 + 9. https://adventofcode.com/2024 + 10. https://adventofcode.com/2024/support + 12. https://adventofcode.com/2024/leaderboard + 13. https://adventofcode.com/2024/stats + 16. https://adventofcode.com/2021/day/23 + 17. https://en.wikipedia.org/wiki/File_system_fragmentation + 18. https://adventofcode.com/2024 + 19. https://adventofcode.com/2024/day/9/input diff --git a/2024/day10/problem b/2024/day10/problem new file mode 100644 index 0000000..1ecb6a3 --- /dev/null +++ b/2024/day10/problem @@ -0,0 +1,198 @@ +Advent of Code + +--- Day 10: Hoof It --- + + You all arrive at a [16]Lava Production Facility on a floating island in + the sky. As the others begin to search the massive industrial complex, you + feel a small nose boop your leg and look down to discover a reindeer + wearing a hard hat. + + The reindeer is holding a book titled "Lava Island Hiking Guide". However, + when you open the book, you discover that most of it seems to have been + scorched by lava! As you're about to ask how you can help, the reindeer + brings you a blank [17]topographic map of the surrounding area (your + puzzle input) and looks up at you excitedly. + + Perhaps you can help fill in the missing hiking trails? + + The topographic map indicates the height at each position using a scale + from 0 (lowest) to 9 (highest). For example: + + 0123 + 1234 + 8765 + 9876 + + Based on un-scorched scraps of the book, you determine that a good hiking + trail is as long as possible and has an even, gradual, uphill slope. For + all practical purposes, this means that a hiking trail is any path that + starts at height 0, ends at height 9, and always increases by a height of + exactly 1 at each step. Hiking trails never include diagonal steps - only + up, down, left, or right (from the perspective of the map). + + You look up from the map and notice that the reindeer has helpfully begun + to construct a small pile of pencils, markers, rulers, compasses, + stickers, and other equipment you might need to update the map with hiking + trails. + + A trailhead is any position that starts one or more hiking trails - here, + these positions will always have height 0. Assembling more fragments of + pages, you establish that a trailhead's score is the number of 9-height + positions reachable from that trailhead via a hiking trail. In the above + example, the single trailhead in the top left corner has a score of 1 + because it can reach a single 9 (the one in the bottom left). + + This trailhead has a score of 2: + + ...0... + ...1... + ...2... + 6543456 + 7.....7 + 8.....8 + 9.....9 + + (The positions marked . are impassable tiles to simplify these examples; + they do not appear on your actual topographic map.) + + This trailhead has a score of 4 because every 9 is reachable via a hiking + trail except the one immediately to the left of the trailhead: + + ..90..9 + ...1.98 + ...2..7 + 6543456 + 765.987 + 876.... + 987.... + + This topographic map contains two trailheads; the trailhead at the top has + a score of 1, while the trailhead at the bottom has a score of 2: + + 10..9.. + 2...8.. + 3...7.. + 4567654 + ...8..3 + ...9..2 + .....01 + + Here's a larger example: + + 89010123 + 78121874 + 87430965 + 96549874 + 45678903 + 32019012 + 01329801 + 10456732 + + This larger example has 9 trailheads. Considering the trailheads in + reading order, they have scores of 5, 6, 5, 3, 1, 3, 5, 3, and 5. Adding + these scores together, the sum of the scores of all trailheads is 36. + + The reindeer gleefully carries over a protractor and adds it to the pile. + What is the sum of the scores of all trailheads on your topographic map? + + Your puzzle answer was 744. + +--- Part Two --- + + The reindeer spends a few minutes reviewing your hiking trail map before + realizing something, disappearing for a few minutes, and finally returning + with yet another slightly-charred piece of paper. + + The paper describes a second way to measure a trailhead called its rating. + A trailhead's rating is the number of distinct hiking trails which begin + at that trailhead. For example: + + .....0. + ..4321. + ..5..2. + ..6543. + ..7..4. + ..8765. + ..9.... + + The above map has a single trailhead; its rating is 3 because there are + exactly three distinct hiking trails which begin at that position: + + .....0. .....0. .....0. + ..4321. .....1. .....1. + ..5.... .....2. .....2. + ..6.... ..6543. .....3. + ..7.... ..7.... .....4. + ..8.... ..8.... ..8765. + ..9.... ..9.... ..9.... + + Here is a map containing a single trailhead with rating 13: + + ..90..9 + ...1.98 + ...2..7 + 6543456 + 765.987 + 876.... + 987.... + + This map contains a single trailhead with rating 227 (because there are + 121 distinct hiking trails that lead to the 9 on the right edge and 106 + that lead to the 9 on the bottom edge): + + 012345 + 123456 + 234567 + 345678 + 4.6789 + 56789. + + Here's the larger example from before: + + 89010123 + 78121874 + 87430965 + 96549874 + 45678903 + 32019012 + 01329801 + 10456732 + + Considering its trailheads in reading order, they have ratings of 20, 24, + 10, 4, 1, 4, 5, 8, and 5. The sum of all trailhead ratings in this larger + example topographic map is 81. + + You're not sure how, but the reindeer seems to have crafted some tiny + flags out of toothpicks and bits of paper and is using them to mark + trailheads on your topographic map. What is the sum of the ratings of all + trailheads? + + Your puzzle answer was 1651. + + Both parts of this puzzle are complete! They provide two gold stars: ** + + At this point, you should [18]return to your Advent calendar and try + another puzzle. + + If you still want to see it, you can [19]get your puzzle input. + +References + + Visible links + 1. https://adventofcode.com/ + 2. https://adventofcode.com/2024/about + 3. https://adventofcode.com/2024/events + 4. https://cottonbureau.com/people/advent-of-code + 5. https://adventofcode.com/2024/settings + 6. https://adventofcode.com/2024/auth/logout + 7. Advent of Code Supporter + https://adventofcode.com/2024/support + 8. https://adventofcode.com/2024 + 9. https://adventofcode.com/2024 + 10. https://adventofcode.com/2024/support + 12. https://adventofcode.com/2024/leaderboard + 13. https://adventofcode.com/2024/stats + 16. https://adventofcode.com/2023/day/15 + 17. https://en.wikipedia.org/wiki/Topographic_map + 18. https://adventofcode.com/2024 + 19. https://adventofcode.com/2024/day/10/input diff --git a/2024/day11/problem b/2024/day11/problem new file mode 100644 index 0000000..b54864f --- /dev/null +++ b/2024/day11/problem @@ -0,0 +1,117 @@ +Advent of Code + +--- Day 11: Plutonian Pebbles --- + + The ancient civilization on [16]Pluto was known for its ability to + manipulate spacetime, and while The Historians explore their infinite + corridors, you've noticed a strange set of physics-defying stones. + + At first glance, they seem like normal stones: they're arranged in a + perfectly straight line, and each stone has a number engraved on it. + + The strange part is that every time you blink, the stones change. + + Sometimes, the number engraved on a stone changes. Other times, a stone + might split in two, causing all the other stones to shift over a bit to + make room in their perfectly straight line. + + As you observe them for a while, you find that the stones have a + consistent behavior. Every time you blink, the stones each simultaneously + change according to the first applicable rule in this list: + + • If the stone is engraved with the number 0, it is replaced by a stone + engraved with the number 1. + • If the stone is engraved with a number that has an even number of + digits, it is replaced by two stones. The left half of the digits are + engraved on the new left stone, and the right half of the digits are + engraved on the new right stone. (The new numbers don't keep extra + leading zeroes: 1000 would become stones 10 and 0.) + • If none of the other rules apply, the stone is replaced by a new + stone; the old stone's number multiplied by 2024 is engraved on the + new stone. + + No matter how the stones change, their order is preserved, and they stay + on their perfectly straight line. + + How will the stones evolve if you keep blinking at them? You take a note + of the number engraved on each stone in the line (your puzzle input). + + If you have an arrangement of five stones engraved with the numbers 0 1 10 + 99 999 and you blink once, the stones transform as follows: + + • The first stone, 0, becomes a stone marked 1. + • The second stone, 1, is multiplied by 2024 to become 2024. + • The third stone, 10, is split into a stone marked 1 followed by a + stone marked 0. + • The fourth stone, 99, is split into two stones marked 9. + • The fifth stone, 999, is replaced by a stone marked 2021976. + + So, after blinking once, your five stones would become an arrangement of + seven stones engraved with the numbers 1 2024 1 0 9 9 2021976. + + Here is a longer example: + + Initial arrangement: + 125 17 + + After 1 blink: + 253000 1 7 + + After 2 blinks: + 253 0 2024 14168 + + After 3 blinks: + 512072 1 20 24 28676032 + + After 4 blinks: + 512 72 2024 2 0 2 4 2867 6032 + + After 5 blinks: + 1036288 7 2 20 24 4048 1 4048 8096 28 67 60 32 + + After 6 blinks: + 2097446912 14168 4048 2 0 2 4 40 48 2024 40 48 80 96 2 8 6 7 6 0 3 2 + + In this example, after blinking six times, you would have 22 stones. After + blinking 25 times, you would have 55312 stones! + + Consider the arrangement of stones in front of you. How many stones will + you have after blinking 25 times? + + Your puzzle answer was 231278. + +--- Part Two --- + + The Historians sure are taking a long time. To be fair, the infinite + corridors are very large. + + How many stones would you have after blinking a total of 75 times? + + Your puzzle answer was 274229228071551. + + Both parts of this puzzle are complete! They provide two gold stars: ** + + At this point, you should [17]return to your Advent calendar and try + another puzzle. + + If you still want to see it, you can [18]get your puzzle input. + +References + + Visible links + 1. https://adventofcode.com/ + 2. https://adventofcode.com/2024/about + 3. https://adventofcode.com/2024/events + 4. https://cottonbureau.com/people/advent-of-code + 5. https://adventofcode.com/2024/settings + 6. https://adventofcode.com/2024/auth/logout + 7. Advent of Code Supporter + https://adventofcode.com/2024/support + 8. https://adventofcode.com/2024 + 9. https://adventofcode.com/2024 + 10. https://adventofcode.com/2024/support + 12. https://adventofcode.com/2024/leaderboard + 13. https://adventofcode.com/2024/stats + 16. https://adventofcode.com/2019/day/20 + 17. https://adventofcode.com/2024 + 18. https://adventofcode.com/2024/day/11/input diff --git a/2024/day12/problem b/2024/day12/problem new file mode 100644 index 0000000..866b3f8 --- /dev/null +++ b/2024/day12/problem @@ -0,0 +1,228 @@ +Advent of Code + +--- Day 12: Garden Groups --- + + Why not search for the Chief Historian near the [16]gardener and his + [17]massive farm? There's plenty of food, so The Historians grab something + to eat while they search. + + You're about to settle near a complex arrangement of garden plots when + some Elves ask if you can lend a hand. They'd like to set up fences around + each region of garden plots, but they can't figure out how much fence they + need to order or how much it will cost. They hand you a map (your puzzle + input) of the garden plots. + + Each garden plot grows only a single type of plant and is indicated by a + single letter on your map. When multiple garden plots are growing the same + type of plant and are touching (horizontally or vertically), they form a + region. For example: + + AAAA + BBCD + BBCC + EEEC + + This 4x4 arrangement includes garden plots growing five different types of + plants (labeled A, B, C, D, and E), each grouped into their own region. + + In order to accurately calculate the cost of the fence around a single + region, you need to know that region's area and perimeter. + + The area of a region is simply the number of garden plots the region + contains. The above map's type A, B, and C plants are each in a region of + area 4. The type E plants are in a region of area 3; the type D plants are + in a region of area 1. + + Each garden plot is a square and so has four sides. The perimeter of a + region is the number of sides of garden plots in the region that do not + touch another garden plot in the same region. The type A and C plants are + each in a region with perimeter 10. The type B and E plants are each in a + region with perimeter 8. The lone D plot forms its own region with + perimeter 4. + + Visually indicating the sides of plots in each region that contribute to + the perimeter using - and |, the above map's regions' perimeters are + measured as follows: + + +-+-+-+-+ + |A A A A| + +-+-+-+-+ +-+ + |D| + +-+-+ +-+ +-+ + |B B| |C| + + + + +-+ + |B B| |C C| + +-+-+ +-+ + + |C| + +-+-+-+ +-+ + |E E E| + +-+-+-+ + + Plants of the same type can appear in multiple separate regions, and + regions can even appear within other regions. For example: + + OOOOO + OXOXO + OOOOO + OXOXO + OOOOO + + The above map contains five regions, one containing all of the O garden + plots, and the other four each containing a single X plot. + + The four X regions each have area 1 and perimeter 4. The region containing + 21 type O plants is more complicated; in addition to its outer edge + contributing a perimeter of 20, its boundary with each X region + contributes an additional 4 to its perimeter, for a total perimeter of 36. + + Due to "modern" business practices, the price of fence required for a + region is found by multiplying that region's area by its perimeter. The + total price of fencing all regions on a map is found by adding together + the price of fence for every region on the map. + + In the first example, region A has price 4 * 10 = 40, region B has price 4 + * 8 = 32, region C has price 4 * 10 = 40, region D has price 1 * 4 = 4, + and region E has price 3 * 8 = 24. So, the total price for the first + example is 140. + + In the second example, the region with all of the O plants has price 21 * + 36 = 756, and each of the four smaller X regions has price 1 * 4 = 4, for + a total price of 772 (756 + 4 + 4 + 4 + 4). + + Here's a larger example: + + RRRRIICCFF + RRRRIICCCF + VVRRRCCFFF + VVRCCCJFFF + VVVVCJJCFE + VVIVCCJJEE + VVIIICJJEE + MIIIIIJJEE + MIIISIJEEE + MMMISSJEEE + + It contains: + + • A region of R plants with price 12 * 18 = 216. + • A region of I plants with price 4 * 8 = 32. + • A region of C plants with price 14 * 28 = 392. + • A region of F plants with price 10 * 18 = 180. + • A region of V plants with price 13 * 20 = 260. + • A region of J plants with price 11 * 20 = 220. + • A region of C plants with price 1 * 4 = 4. + • A region of E plants with price 13 * 18 = 234. + • A region of I plants with price 14 * 22 = 308. + • A region of M plants with price 5 * 12 = 60. + • A region of S plants with price 3 * 8 = 24. + + So, it has a total price of 1930. + + What is the total price of fencing all regions on your map? + + Your puzzle answer was 1522850. + +--- Part Two --- + + Fortunately, the Elves are trying to order so much fence that they qualify + for a bulk discount! + + Under the bulk discount, instead of using the perimeter to calculate the + price, you need to use the number of sides each region has. Each straight + section of fence counts as a side, regardless of how long it is. + + Consider this example again: + + AAAA + BBCD + BBCC + EEEC + + The region containing type A plants has 4 sides, as does each of the + regions containing plants of type B, D, and E. However, the more complex + region containing the plants of type C has 8 sides! + + Using the new method of calculating the per-region price by multiplying + the region's area by its number of sides, regions A through E have prices + 16, 16, 32, 4, and 12, respectively, for a total price of 80. + + The second example above (full of type X and O plants) would have a total + price of 436. + + Here's a map that includes an E-shaped region full of type E plants: + + EEEEE + EXXXX + EEEEE + EXXXX + EEEEE + + The E-shaped region has an area of 17 and 12 sides for a price of 204. + Including the two regions full of type X plants, this map has a total + price of 236. + + This map has a total price of 368: + + AAAAAA + AAABBA + AAABBA + ABBAAA + ABBAAA + AAAAAA + + It includes two regions full of type B plants (each with 4 sides) and a + single region full of type A plants (with 4 sides on the outside and 8 + more sides on the inside, a total of 12 sides). Be especially careful when + counting the fence around regions like the one full of type A plants; in + particular, each section of fence has an in-side and an out-side, so the + fence does not connect across the middle of the region (where the two B + regions touch diagonally). (The Elves would have used the Möbius Fencing + Company instead, but their contract terms were too one-sided.) + + The larger example from before now has the following updated prices: + + • A region of R plants with price 12 * 10 = 120. + • A region of I plants with price 4 * 4 = 16. + • A region of C plants with price 14 * 22 = 308. + • A region of F plants with price 10 * 12 = 120. + • A region of V plants with price 13 * 10 = 130. + • A region of J plants with price 11 * 12 = 132. + • A region of C plants with price 1 * 4 = 4. + • A region of E plants with price 13 * 8 = 104. + • A region of I plants with price 14 * 16 = 224. + • A region of M plants with price 5 * 6 = 30. + • A region of S plants with price 3 * 6 = 18. + + Adding these together produces its new total price of 1206. + + What is the new total price of fencing all regions on your map? + + Your puzzle answer was 953738. + + Both parts of this puzzle are complete! They provide two gold stars: ** + + At this point, you should [18]return to your Advent calendar and try + another puzzle. + + If you still want to see it, you can [19]get your puzzle input. + +References + + Visible links + 1. https://adventofcode.com/ + 2. https://adventofcode.com/2024/about + 3. https://adventofcode.com/2024/events + 4. https://cottonbureau.com/people/advent-of-code + 5. https://adventofcode.com/2024/settings + 6. https://adventofcode.com/2024/auth/logout + 7. Advent of Code Supporter + https://adventofcode.com/2024/support + 8. https://adventofcode.com/2024 + 9. https://adventofcode.com/2024 + 10. https://adventofcode.com/2024/support + 12. https://adventofcode.com/2024/leaderboard + 13. https://adventofcode.com/2024/stats + 16. https://adventofcode.com/2023/day/5 + 17. https://adventofcode.com/2023/day/21 + 18. https://adventofcode.com/2024 + 19. https://adventofcode.com/2024/day/12/input diff --git a/2024/day13/problem b/2024/day13/problem new file mode 100644 index 0000000..4f6cb39 --- /dev/null +++ b/2024/day13/problem @@ -0,0 +1,145 @@ +Advent of Code + +--- Day 13: Claw Contraption --- + + Next up: the [16]lobby of a resort on a tropical island. The Historians + take a moment to admire the hexagonal floor tiles before spreading out. + + Fortunately, it looks like the resort has a new [17]arcade! Maybe you can + win some prizes from the [18]claw machines? + + The claw machines here are a little unusual. Instead of a joystick or + directional buttons to control the claw, these machines have two buttons + labeled A and B. Worse, you can't just put in a token and play; it costs 3 + tokens to push the A button and 1 token to push the B button. + + With a little experimentation, you figure out that each machine's buttons + are configured to move the claw a specific amount to the right (along the + X axis) and a specific amount forward (along the Y axis) each time that + button is pressed. + + Each machine contains one prize; to win the prize, the claw must be + positioned exactly above the prize on both the X and Y axes. + + You wonder: what is the smallest number of tokens you would have to spend + to win as many prizes as possible? You assemble a list of every machine's + button behavior and prize location (your puzzle input). For example: + + Button A: X+94, Y+34 + Button B: X+22, Y+67 + Prize: X=8400, Y=5400 + + Button A: X+26, Y+66 + Button B: X+67, Y+21 + Prize: X=12748, Y=12176 + + Button A: X+17, Y+86 + Button B: X+84, Y+37 + Prize: X=7870, Y=6450 + + Button A: X+69, Y+23 + Button B: X+27, Y+71 + Prize: X=18641, Y=10279 + + This list describes the button configuration and prize location of four + different claw machines. + + For now, consider just the first claw machine in the list: + + • Pushing the machine's A button would move the claw 94 units along the + X axis and 34 units along the Y axis. + • Pushing the B button would move the claw 22 units along the X axis and + 67 units along the Y axis. + • The prize is located at X=8400, Y=5400; this means that from the + claw's initial position, it would need to move exactly 8400 units + along the X axis and exactly 5400 units along the Y axis to be + perfectly aligned with the prize in this machine. + + The cheapest way to win the prize is by pushing the A button 80 times and + the B button 40 times. This would line up the claw along the X axis + (because 80*94 + 40*22 = 8400) and along the Y axis (because 80*34 + 40*67 + = 5400). Doing this would cost 80*3 tokens for the A presses and 40*1 for + the B presses, a total of 280 tokens. + + For the second and fourth claw machines, there is no combination of A and + B presses that will ever win a prize. + + For the third claw machine, the cheapest way to win the prize is by + pushing the A button 38 times and the B button 86 times. Doing this would + cost a total of 200 tokens. + + So, the most prizes you could possibly win is two; the minimum tokens you + would have to spend to win all (two) prizes is 480. + + You estimate that each button would need to be pressed no more than 100 + times to win a prize. How else would someone be expected to play? + + Figure out how to win as many prizes as possible. What is the fewest + tokens you would have to spend to win all possible prizes? + + Your puzzle answer was 30973. + +--- Part Two --- + + As you go to win the first prize, you discover that the claw is nowhere + near where you expected it would be. Due to a unit conversion error in + your measurements, the position of every prize is actually 10000000000000 + higher on both the X and Y axis! + + Add 10000000000000 to the X and Y position of every prize. After making + this change, the example above would now look like this: + + Button A: X+94, Y+34 + Button B: X+22, Y+67 + Prize: X=10000000008400, Y=10000000005400 + + Button A: X+26, Y+66 + Button B: X+67, Y+21 + Prize: X=10000000012748, Y=10000000012176 + + Button A: X+17, Y+86 + Button B: X+84, Y+37 + Prize: X=10000000007870, Y=10000000006450 + + Button A: X+69, Y+23 + Button B: X+27, Y+71 + Prize: X=10000000018641, Y=10000000010279 + + Now, it is only possible to win a prize on the second and fourth claw + machines. Unfortunately, it will take many more than 100 presses to do so. + + Using the corrected prize coordinates, figure out how to win as many + prizes as possible. What is the fewest tokens you would have to spend to + win all possible prizes? + + Your puzzle answer was 95688837203288. + + Both parts of this puzzle are complete! They provide two gold stars: ** + + At this point, you should [19]return to your Advent calendar and try + another puzzle. + + If you still want to see it, you can [20]get your puzzle input. + +References + + Visible links + 1. https://adventofcode.com/ + 2. https://adventofcode.com/2024/about + 3. https://adventofcode.com/2024/events + 4. https://cottonbureau.com/people/advent-of-code + 5. https://adventofcode.com/2024/settings + 6. https://adventofcode.com/2024/auth/logout + 7. Advent of Code Supporter + https://adventofcode.com/2024/support + 8. https://adventofcode.com/2024 + 9. https://adventofcode.com/2024 + 10. https://adventofcode.com/2024/support + 11. https://adventofcode.com/2024/sponsors + 12. https://adventofcode.com/2024/leaderboard + 13. https://adventofcode.com/2024/stats + 16. https://adventofcode.com/2020/day/24 + 17. https://en.wikipedia.org/wiki/Amusement_arcade + 18. https://en.wikipedia.org/wiki/Claw_machine + 19. https://adventofcode.com/2024 + 20. https://adventofcode.com/2024/day/13/input diff --git a/2024/day14/problem b/2024/day14/problem new file mode 100644 index 0000000..f68095f --- /dev/null +++ b/2024/day14/problem @@ -0,0 +1,193 @@ +Advent of Code + +--- Day 14: Restroom Redoubt --- + + One of The Historians needs to use the bathroom; fortunately, you know + there's a bathroom near an unvisited location on their list, and so you're + all quickly teleported directly to the lobby of Easter Bunny Headquarters. + + Unfortunately, EBHQ seems to have "improved" bathroom security again after + your last [16]visit. The area outside the bathroom is swarming with + robots! + + To get The Historian safely to the bathroom, you'll need a way to predict + where the robots will be in the future. Fortunately, they all seem to be + moving on the tile floor in predictable straight lines. + + You make a list (your puzzle input) of all of the robots' current + positions (p) and velocities (v), one robot per line. For example: + + p=0,4 v=3,-3 + p=6,3 v=-1,-3 + p=10,3 v=-1,2 + p=2,0 v=2,-1 + p=0,0 v=1,3 + p=3,0 v=-2,-2 + p=7,6 v=-1,-3 + p=3,0 v=-1,-2 + p=9,3 v=2,3 + p=7,3 v=-1,2 + p=2,4 v=2,-3 + p=9,5 v=-3,-3 + + Each robot's position is given as p=x,y where x represents the number of + tiles the robot is from the left wall and y represents the number of tiles + from the top wall (when viewed from above). So, a position of p=0,0 means + the robot is all the way in the top-left corner. + + Each robot's velocity is given as v=x,y where x and y are given in tiles + per second. Positive x means the robot is moving to the right, and + positive y means the robot is moving down. So, a velocity of v=1,-2 means + that each second, the robot moves 1 tile to the right and 2 tiles up. + + The robots outside the actual bathroom are in a space which is 101 tiles + wide and 103 tiles tall (when viewed from above). However, in this + example, the robots are in a space which is only 11 tiles wide and 7 tiles + tall. + + The robots are good at navigating over/under each other (due to a + combination of springs, extendable legs, and quadcopters), so they can + share the same tile and don't interact with each other. Visually, the + number of robots on each tile in this example looks like this: + + 1.12....... + ........... + ........... + ......11.11 + 1.1........ + .........1. + .......1... + + These robots have a unique feature for maximum bathroom security: they can + teleport. When a robot would run into an edge of the space they're in, + they instead teleport to the other side, effectively wrapping around the + edges. Here is what robot p=2,4 v=2,-3 does for the first few seconds: + + Initial state: + ........... + ........... + ........... + ........... + ..1........ + ........... + ........... + + After 1 second: + ........... + ....1...... + ........... + ........... + ........... + ........... + ........... + + After 2 seconds: + ........... + ........... + ........... + ........... + ........... + ......1.... + ........... + + After 3 seconds: + ........... + ........... + ........1.. + ........... + ........... + ........... + ........... + + After 4 seconds: + ........... + ........... + ........... + ........... + ........... + ........... + ..........1 + + After 5 seconds: + ........... + ........... + ........... + .1......... + ........... + ........... + ........... + + The Historian can't wait much longer, so you don't have to simulate the + robots for very long. Where will the robots be after 100 seconds? + + In the above example, the number of robots on each tile after 100 seconds + has elapsed looks like this: + + ......2..1. + ........... + 1.......... + .11........ + .....1..... + ...12...... + .1....1.... + + To determine the safest area, count the number of robots in each quadrant + after 100 seconds. Robots that are exactly in the middle (horizontally or + vertically) don't count as being in any quadrant, so the only relevant + robots are: + + ..... 2..1. + ..... ..... + 1.... ..... + + ..... ..... + ...12 ..... + .1... 1.... + + In this example, the quadrants contain 1, 3, 4, and 1 robot. Multiplying + these together gives a total safety factor of 12. + + Predict the motion of the robots in your list within a space which is 101 + tiles wide and 103 tiles tall. What will the safety factor be after + exactly 100 seconds have elapsed? + + Your puzzle answer was 218965032. + +--- Part Two --- + + During the bathroom break, someone notices that these robots seem awfully + similar to ones built and used at the North Pole. If they're the same type + of robots, they should have a hard-coded Easter egg: very rarely, most of + the robots should arrange themselves into a picture of a Christmas tree. + + What is the fewest number of seconds that must elapse for the robots to + display the Easter egg? + + Your puzzle answer was 7037. + + Both parts of this puzzle are complete! They provide two gold stars: ** + + At this point, you should [17]return to your Advent calendar and try + another puzzle. + + If you still want to see it, you can [18]get your puzzle input. + +References + + Visible links + 1. https://adventofcode.com/ + 2. https://adventofcode.com/2024/about + 3. https://adventofcode.com/2024/events + 4. https://cottonbureau.com/people/advent-of-code + 5. https://adventofcode.com/2024/settings + 6. https://adventofcode.com/2024/auth/logout + 7. Advent of Code Supporter + https://adventofcode.com/2024/support + 8. https://adventofcode.com/2024 + 9. https://adventofcode.com/2024 + 10. https://adventofcode.com/2024/support + 12. https://adventofcode.com/2024/leaderboard + 13. https://adventofcode.com/2024/stats + 16. https://adventofcode.com/2016/day/2 + 17. https://adventofcode.com/2024 + 18. https://adventofcode.com/2024/day/14/input diff --git a/2024/day15/problem b/2024/day15/problem new file mode 100644 index 0000000..c3ec016 --- /dev/null +++ b/2024/day15/problem @@ -0,0 +1,498 @@ +Advent of Code + +--- Day 15: Warehouse Woes --- + + You appear back inside your own mini submarine! Each Historian drives + their mini submarine in a different direction; maybe the Chief has his own + submarine down here somewhere as well? + + You look up to see a vast school of [16]lanternfish swimming past you. On + closer inspection, they seem quite anxious, so you drive your mini + submarine over to see if you can help. + + Because lanternfish populations grow rapidly, they need a lot of food, and + that food needs to be stored somewhere. That's why these lanternfish have + built elaborate warehouse complexes operated by robots! + + These lanternfish seem so anxious because they have lost control of the + robot that operates one of their most important warehouses! It is + currently running amok, pushing around boxes in the warehouse with no + regard for lanternfish logistics or lanternfish inventory management + strategies. + + Right now, none of the lanternfish are brave enough to swim up to an + unpredictable robot so they could shut it off. However, if you could + anticipate the robot's movements, maybe they could find a safe option. + + The lanternfish already have a map of the warehouse and a list of + movements the robot will attempt to make (your puzzle input). The problem + is that the movements will sometimes fail as boxes are shifted around, + making the actual movements of the robot difficult to predict. + + For example: + + ########## + #..O..O.O# + #......O.# + #.OO..O.O# + #..O@..O.# + #O#..O...# + #O..O..O.# + #.OO.O.OO# + #....O...# + ########## + + ^v>^vv^v>v<>v^v<<><>>v^v^>^<<<><^ + vvv<<^>^v^^><<>>><>^<<><^vv^^<>vvv<>><^^v>^>vv<>v<<<^<^^>>>^<>vv>v^v^<>><>>>><^^>vv>v<^^^>>v^v^<^^>v^^>v^<^v>v<>>v^v^v^^<^^vv< + <>^^^^>>>v^<>vvv^>^^^vv^^>v<^^^^v<>^>vvvv><>>v^<<^^^^^ + ^><^><>>><>^^<<^^v>>><^^>v>>>^v><>^v><<<>vvvv>^<><<>^>< + ^>><>^v<><^vvv<^^<><^v<<<><<<^^<^>>^<<<^>>^v^>>^v>vv>^<<^v<>><<><<>v<^vv<<<>^^v^>^^>>><<^v>>v^v><^^>>^<>vv^ + <><^^>^^^<>^vv<<^><<><<><<<^^<<<^<<>><<><^^^>^^<>^>v<> + ^^>vv<^v^v^<>^^^>>>^^vvv^>vvv<>>>^<^>>>>>^<<^v>^vvv<>^<>< + v^^>>><<^^<>>^v^v^<<>^<^v^v><^<<<><<^vv>>v>v^<<^ + + As the robot (@) attempts to move, if there are any boxes (O) in the way, + the robot will also attempt to push those boxes. However, if this action + would cause the robot or a box to move into a wall (#), nothing moves + instead, including the robot. The initial positions of these are shown on + the map at the top of the document the lanternfish gave you. + + The rest of the document describes the moves (^ for up, v for down, < for + left, > for right) that the robot will attempt to make, in order. (The + moves form a single giant sequence; they are broken into multiple lines + just to make copy-pasting easier. Newlines within the move sequence should + be ignored.) + + Here is a smaller example to get started: + + ######## + #..O.O.# + ##@.O..# + #...O..# + #.#.O..# + #...O..# + #......# + ######## + + <^^>>>vv>v<< + + Were the robot to attempt the given sequence of moves, it would push + around the boxes as follows: + + Initial state: + ######## + #..O.O.# + ##@.O..# + #...O..# + #.#.O..# + #...O..# + #......# + ######## + + Move <: + ######## + #..O.O.# + ##@.O..# + #...O..# + #.#.O..# + #...O..# + #......# + ######## + + Move ^: + ######## + #.@O.O.# + ##..O..# + #...O..# + #.#.O..# + #...O..# + #......# + ######## + + Move ^: + ######## + #.@O.O.# + ##..O..# + #...O..# + #.#.O..# + #...O..# + #......# + ######## + + Move >: + ######## + #..@OO.# + ##..O..# + #...O..# + #.#.O..# + #...O..# + #......# + ######## + + Move >: + ######## + #...@OO# + ##..O..# + #...O..# + #.#.O..# + #...O..# + #......# + ######## + + Move >: + ######## + #...@OO# + ##..O..# + #...O..# + #.#.O..# + #...O..# + #......# + ######## + + Move v: + ######## + #....OO# + ##..@..# + #...O..# + #.#.O..# + #...O..# + #...O..# + ######## + + Move v: + ######## + #....OO# + ##..@..# + #...O..# + #.#.O..# + #...O..# + #...O..# + ######## + + Move <: + ######## + #....OO# + ##.@...# + #...O..# + #.#.O..# + #...O..# + #...O..# + ######## + + Move v: + ######## + #....OO# + ##.....# + #..@O..# + #.#.O..# + #...O..# + #...O..# + ######## + + Move >: + ######## + #....OO# + ##.....# + #...@O.# + #.#.O..# + #...O..# + #...O..# + ######## + + Move >: + ######## + #....OO# + ##.....# + #....@O# + #.#.O..# + #...O..# + #...O..# + ######## + + Move v: + ######## + #....OO# + ##.....# + #.....O# + #.#.O@.# + #...O..# + #...O..# + ######## + + Move <: + ######## + #....OO# + ##.....# + #.....O# + #.#O@..# + #...O..# + #...O..# + ######## + + Move <: + ######## + #....OO# + ##.....# + #.....O# + #.#O@..# + #...O..# + #...O..# + ######## + + The larger example has many more moves; after the robot has finished those + moves, the warehouse would look like this: + + ########## + #.O.O.OOO# + #........# + #OO......# + #OO@.....# + #O#.....O# + #O.....OO# + #O.....OO# + #OO....OO# + ########## + + The lanternfish use their own custom Goods Positioning System (GPS for + short) to track the locations of the boxes. The GPS coordinate of a box is + equal to 100 times its distance from the top edge of the map plus its + distance from the left edge of the map. (This process does not stop at + wall tiles; measure all the way to the edges of the map.) + + So, the box shown below has a distance of 1 from the top edge of the map + and 4 from the left edge of the map, resulting in a GPS coordinate of 100 + * 1 + 4 = 104. + + ####### + #...O.. + #...... + + The lanternfish would like to know the sum of all boxes' GPS coordinates + after the robot finishes moving. In the larger example, the sum of all + boxes' GPS coordinates is 10092. In the smaller example, the sum is 2028. + + Predict the motion of the robot and boxes in the warehouse. After the + robot is finished moving, what is the sum of all boxes' GPS coordinates? + + Your puzzle answer was 1527563. + +--- Part Two --- + + The lanternfish use your information to find a safe moment to swim in and + turn off the malfunctioning robot! Just as they start preparing a festival + in your honor, reports start coming in that a second warehouse's robot is + also malfunctioning. + + This warehouse's layout is surprisingly similar to the one you just + helped. There is one key difference: everything except the robot is twice + as wide! The robot's list of movements doesn't change. + + To get the wider warehouse's map, start with your original map and, for + each tile, make the following changes: + + • If the tile is #, the new map contains ## instead. + • If the tile is O, the new map contains [] instead. + • If the tile is ., the new map contains .. instead. + • If the tile is @, the new map contains @. instead. + + This will produce a new warehouse map which is twice as wide and with wide + boxes that are represented by []. (The robot does not change size.) + + The larger example from before would now look like this: + + #################### + ##....[]....[]..[]## + ##............[]..## + ##..[][]....[]..[]## + ##....[]@.....[]..## + ##[]##....[]......## + ##[]....[]....[]..## + ##..[][]..[]..[][]## + ##........[]......## + #################### + + Because boxes are now twice as wide but the robot is still the same size + and speed, boxes can be aligned such that they directly push two other + boxes at once. For example, consider this situation: + + ####### + #...#.# + #.....# + #..OO@# + #..O..# + #.....# + ####### + + score { - // We have a new best path - bestPaths = [][]h.Coordinate{path} - scoreTrack[end] = score - } else if scoreTrack[end] == score { - bestPaths = append(bestPaths, path) - } - return score - } - - // Helper func - canMoveTo := func(p h.Coordinate) bool { - return inp.ContainsCoord(p) && inp.Get(p) != '#' - } - // Keep moving: - tryMove := func(c CD, cost int) { - if canMoveTo(c.c) { - // Check if this path has alread gone through this spot - nxtPath := make([]h.Coordinate, len(path)) - copy(nxtPath, path) - if coordInPath(c.c, nxtPath) { - return - } - // Ok, now what's the best score we end up if we make this move? - nextScore := score + cost - n, ok := scoreTrack[c.c] - if !ok || n > nextScore { - lookForSeats(inp, c, end, nextScore, append(nxtPath, c.c)) - } - } - } - // Test forward - tryMove(start.move(), 1) - // Test CW - tryMove(start.turnCW().move(), 1001) - // Test CCW - tryMove(start.turnCCW().move(), 1001) - return scoreTrack[start.c] -} -*/ - -type CD struct { - c h.Coordinate - d h.Coordinate -} - -func (cd CD) move() CD { - return CD{ - c: cd.c.Add(cd.d), - d: cd.d, - } -} - -func (cd CD) turnCW() CD { - var newD h.Coordinate - switch cd.d { - case N: - newD = E - case E: - newD = S - case S: - newD = W - case W: - newD = N - } - return CD{ - c: cd.c, - d: newD, - } -} - -func (cd CD) turnCCW() CD { - var newD h.Coordinate - switch cd.d { - case N: - newD = W - case E: - newD = N - case S: - newD = E - case W: - newD = S - } - return CD{ - c: cd.c, - d: newD, - } -} - -func (cd CD) Byte() byte { - switch cd.d { - case N: - return '^' - case E: - return '>' - case S: - return 'v' - case W: - return '<' - } - return '?' -} diff --git a/2024/day16/problem b/2024/day16/problem new file mode 100644 index 0000000..5a90279 --- /dev/null +++ b/2024/day16/problem @@ -0,0 +1,190 @@ +Advent of Code + +--- Day 16: Reindeer Maze --- + + It's time again for the [16]Reindeer Olympics! This year, the big event is + the Reindeer Maze, where the Reindeer compete for the lowest score. + + You and The Historians arrive to search for the Chief right as the event + is about to start. It wouldn't hurt to watch a little, right? + + The Reindeer start on the Start Tile (marked S) facing East and need to + reach the End Tile (marked E). They can move forward one tile at a time + (increasing their score by 1 point), but never into a wall (#). They can + also rotate clockwise or counterclockwise 90 degrees at a time (increasing + their score by 1000 points). + + To figure out the best place to sit, you start by grabbing a map (your + puzzle input) from a nearby kiosk. For example: + + ############### + #.......#....E# + #.#.###.#.###.# + #.....#.#...#.# + #.###.#####.#.# + #.#.#.......#.# + #.#.#####.###.# + #...........#.# + ###.#.#####.#.# + #...#.....#.#.# + #.#.#.###.#.#.# + #.....#...#.#.# + #.###.#.#.#.#.# + #S..#.....#...# + ############### + + There are many paths through this maze, but taking any of the best paths + would incur a score of only 7036. This can be achieved by taking a total + of 36 steps forward and turning 90 degrees a total of 7 times: + + ############### + #.......#....E# + #.#.###.#.###^# + #.....#.#...#^# + #.###.#####.#^# + #.#.#.......#^# + #.#.#####.###^# + #..>>>>>>>>v#^# + ###^#.#####v#^# + #>>^#.....#v#^# + #^#.#.###.#v#^# + #^....#...#v#^# + #^###.#.#.#v#^# + #S..#.....#>>^# + ############### + + Here's a second example: + + ################# + #...#...#...#..E# + #.#.#.#.#.#.#.#.# + #.#.#.#...#...#.# + #.#.#.#.###.#.#.# + #...#.#.#.....#.# + #.#.#.#.#.#####.# + #.#...#.#.#.....# + #.#.#####.#.###.# + #.#.#.......#...# + #.#.###.#####.### + #.#.#...#.....#.# + #.#.#.#####.###.# + #.#.#.........#.# + #.#.#.#########.# + #S#.............# + ################# + + In this maze, the best paths cost 11048 points; following one such path + would look like this: + + ################# + #...#...#...#..E# + #.#.#.#.#.#.#.#^# + #.#.#.#...#...#^# + #.#.#.#.###.#.#^# + #>>v#.#.#.....#^# + #^#v#.#.#.#####^# + #^#v..#.#.#>>>>^# + #^#v#####.#^###.# + #^#v#..>>>>^#...# + #^#v###^#####.### + #^#v#>>^#.....#.# + #^#v#^#####.###.# + #^#v#^........#.# + #^#v#^#########.# + #S#>>^..........# + ################# + + Note that the path shown above includes one 90 degree turn as the very + first move, rotating the Reindeer from facing East to facing North. + + Analyze your map carefully. What is the lowest score a Reindeer could + possibly get? + + Your puzzle answer was 72400. + +--- Part Two --- + + Now that you know what the best paths look like, you can figure out the + best spot to sit. + + Every non-wall tile (S, ., or E) is equipped with places to sit along the + edges of the tile. While determining which of these tiles would be the + best spot to sit depends on a whole bunch of factors (how comfortable the + seats are, how far away the bathrooms are, whether there's a pillar + blocking your view, etc.), the most important factor is whether the tile + is on one of the best paths through the maze. If you sit somewhere else, + you'd miss all the action! + + So, you'll need to determine which tiles are part of any best path through + the maze, including the S and E tiles. + + In the first example, there are 45 tiles (marked O) that are part of at + least one of the various best paths through the maze: + + ############### + #.......#....O# + #.#.###.#.###O# + #.....#.#...#O# + #.###.#####.#O# + #.#.#.......#O# + #.#.#####.###O# + #..OOOOOOOOO#O# + ###O#O#####O#O# + #OOO#O....#O#O# + #O#O#O###.#O#O# + #OOOOO#...#O#O# + #O###.#.#.#O#O# + #O..#.....#OOO# + ############### + + In the second example, there are 64 tiles that are part of at least one of + the best paths: + + ################# + #...#...#...#..O# + #.#.#.#.#.#.#.#O# + #.#.#.#...#...#O# + #.#.#.#.###.#.#O# + #OOO#.#.#.....#O# + #O#O#.#.#.#####O# + #O#O..#.#.#OOOOO# + #O#O#####.#O###O# + #O#O#..OOOOO#OOO# + #O#O###O#####O### + #O#O#OOO#..OOO#.# + #O#O#O#####O###.# + #O#O#OOOOOOO..#.# + #O#O#O#########.# + #O#OOO..........# + ################# + + Analyze your map further. How many tiles are part of at least one of the + best paths through the maze? + + Your puzzle answer was 435. + + Both parts of this puzzle are complete! They provide two gold stars: ** + + At this point, you should [17]return to your Advent calendar and try + another puzzle. + + If you still want to see it, you can [18]get your puzzle input. + +References + + Visible links + 1. https://adventofcode.com/ + 2. https://adventofcode.com/2024/about + 3. https://adventofcode.com/2024/events + 5. https://adventofcode.com/2024/settings + 6. https://adventofcode.com/2024/auth/logout + 7. Advent of Code Supporter + https://adventofcode.com/2024/support + 8. https://adventofcode.com/2024 + 9. https://adventofcode.com/2024 + 10. https://adventofcode.com/2024/support + 12. https://adventofcode.com/2024/leaderboard + 13. https://adventofcode.com/2024/stats + 16. https://adventofcode.com/2015/day/14 + 17. https://adventofcode.com/2024 + 18. https://adventofcode.com/2024/day/16/input diff --git a/2024/day17/problem b/2024/day17/problem new file mode 100644 index 0000000..9719b76 --- /dev/null +++ b/2024/day17/problem @@ -0,0 +1,168 @@ +Advent of Code + +--- Day 17: Chronospatial Computer --- + + The Historians push the button on their strange device, but this time, you + all just feel like you're [16]falling. + + "Situation critical", the device announces in a familiar voice. + "Bootstrapping process failed. Initializing debugger...." + + The small handheld device suddenly unfolds into an entire computer! The + Historians look around nervously before one of them tosses it to you. + + This seems to be a 3-bit computer: its program is a list of 3-bit numbers + (0 through 7), like 0,1,2,3. The computer also has three registers named + A, B, and C, but these registers aren't limited to 3 bits and can instead + hold any integer. + + The computer knows eight instructions, each identified by a 3-bit number + (called the instruction's opcode). Each instruction also reads the 3-bit + number after it as an input; this is called its operand. + + A number called the instruction pointer identifies the position in the + program from which the next opcode will be read; it starts at 0, pointing + at the first 3-bit number in the program. Except for jump instructions, + the instruction pointer increases by 2 after each instruction is processed + (to move past the instruction's opcode and its operand). If the computer + tries to read an opcode past the end of the program, it instead halts. + + So, the program 0,1,2,3 would run the instruction whose opcode is 0 and + pass it the operand 1, then run the instruction having opcode 2 and pass + it the operand 3, then halt. + + There are two types of operands; each instruction specifies the type of + its operand. The value of a literal operand is the operand itself. For + example, the value of the literal operand 7 is the number 7. The value of + a combo operand can be found as follows: + + • Combo operands 0 through 3 represent literal values 0 through 3. + • Combo operand 4 represents the value of register A. + • Combo operand 5 represents the value of register B. + • Combo operand 6 represents the value of register C. + • Combo operand 7 is reserved and will not appear in valid programs. + + The eight instructions are as follows: + + The adv instruction (opcode 0) performs division. The numerator is the + value in the A register. The denominator is found by raising 2 to the + power of the instruction's combo operand. (So, an operand of 2 would + divide A by 4 (2^2); an operand of 5 would divide A by 2^B.) The result of + the division operation is truncated to an integer and then written to the + A register. + + The bxl instruction (opcode 1) calculates the [17]bitwise XOR of register + B and the instruction's literal operand, then stores the result in + register B. + + The bst instruction (opcode 2) calculates the value of its combo operand + [18]modulo 8 (thereby keeping only its lowest 3 bits), then writes that + value to the B register. + + The jnz instruction (opcode 3) does nothing if the A register is 0. + However, if the A register is not zero, it jumps by setting the + instruction pointer to the value of its literal operand; if this + instruction jumps, the instruction pointer is not increased by 2 after + this instruction. + + The bxc instruction (opcode 4) calculates the bitwise XOR of register B + and register C, then stores the result in register B. (For legacy reasons, + this instruction reads an operand but ignores it.) + + The out instruction (opcode 5) calculates the value of its combo operand + modulo 8, then outputs that value. (If a program outputs multiple values, + they are separated by commas.) + + The bdv instruction (opcode 6) works exactly like the adv instruction + except that the result is stored in the B register. (The numerator is + still read from the A register.) + + The cdv instruction (opcode 7) works exactly like the adv instruction + except that the result is stored in the C register. (The numerator is + still read from the A register.) + + Here are some examples of instruction operation: + + • If register C contains 9, the program 2,6 would set register B to 1. + • If register A contains 10, the program 5,0,5,1,5,4 would output 0,1,2. + • If register A contains 2024, the program 0,1,5,4,3,0 would output + 4,2,5,6,7,7,7,7,3,1,0 and leave 0 in register A. + • If register B contains 29, the program 1,7 would set register B to 26. + • If register B contains 2024 and register C contains 43690, the program + 4,0 would set register B to 44354. + + The Historians' strange device has finished initializing its debugger and + is displaying some information about the program it is trying to run (your + puzzle input). For example: + + Register A: 729 + Register B: 0 + Register C: 0 + + Program: 0,1,5,4,3,0 + + Your first task is to determine what the program is trying to output. To + do this, initialize the registers to the given values, then run the given + program, collecting any output produced by out instructions. (Always join + the values produced by out instructions with commas.) After the above + program halts, its final output will be 4,6,3,5,6,3,5,2,1,0. + + Using the information provided by the debugger, initialize the registers + to the given values, then run the program. Once it halts, what do you get + if you use commas to join the values it output into a single string? + + Your puzzle answer was 2,7,6,5,6,0,2,3,1. + +--- Part Two --- + + Digging deeper in the device's manual, you discover the problem: this + program is supposed to output another copy of the program! Unfortunately, + the value in register A seems to have been corrupted. You'll need to find + a new value to which you can initialize register A so that the program's + output instructions produce an exact copy of the program itself. + + For example: + + Register A: 2024 + Register B: 0 + Register C: 0 + + Program: 0,3,5,4,3,0 + + This program outputs a copy of itself if register A is instead initialized + to 117440. (The original initial value of register A, 2024, is ignored.) + + What is the lowest positive initial value for register A that causes the + program to output a copy of itself? + + Your puzzle answer was 107416870455451. + + Both parts of this puzzle are complete! They provide two gold stars: ** + + At this point, you should [19]return to your Advent calendar and try + another puzzle. + + If you still want to see it, you can [20]get your puzzle input. + +References + + Visible links + 1. https://adventofcode.com/ + 2. https://adventofcode.com/2024/about + 3. https://adventofcode.com/2024/events + 4. https://cottonbureau.com/people/advent-of-code + 5. https://adventofcode.com/2024/settings + 6. https://adventofcode.com/2024/auth/logout + 7. Advent of Code Supporter + https://adventofcode.com/2024/support + 8. https://adventofcode.com/2024 + 9. https://adventofcode.com/2024 + 10. https://adventofcode.com/2024/support + 11. https://adventofcode.com/2024/sponsors + 12. https://adventofcode.com/2024/leaderboard + 13. https://adventofcode.com/2024/stats + 16. https://adventofcode.com/2018/day/6 + 17. https://en.wikipedia.org/wiki/Bitwise_operation#XOR + 18. https://en.wikipedia.org/wiki/Modulo + 19. https://adventofcode.com/2024 + 20. https://adventofcode.com/2024/day/17/input