diff --git a/2024/day20/problem b/2024/day20/problem new file mode 100644 index 0000000..95d08ba --- /dev/null +++ b/2024/day20/problem @@ -0,0 +1,259 @@ +Advent of Code + +--- Day 20: Race Condition --- + + The Historians are quite pixelated again. This time, a massive, black + building looms over you - you're [16]right outside the CPU! + + While The Historians get to work, a nearby program sees that you're idle + and challenges you to a race. Apparently, you've arrived just in time for + the frequently-held race condition festival! + + The race takes place on a particularly long and twisting code path; + programs compete to see who can finish in the fewest picoseconds. The + winner even gets their very own [17]mutex! + + They hand you a map of the racetrack (your puzzle input). For example: + + ############### + #...#...#.....# + #.#.#.#.#.###.# + #S#...#.#.#...# + #######.#.#.### + #######.#.#...# + #######.#.###.# + ###..E#...#...# + ###.#######.### + #...###...#...# + #.#####.#.###.# + #.#...#.#.#...# + #.#.#.#.#.#.### + #...#...#...### + ############### + + The map consists of track (.) - including the start (S) and end (E) + positions (both of which also count as track) - and walls (#). + + When a program runs through the racetrack, it starts at the start + position. Then, it is allowed to move up, down, left, or right; each such + move takes 1 picosecond. The goal is to reach the end position as quickly + as possible. In this example racetrack, the fastest time is 84 + picoseconds. + + Because there is only a single path from the start to the end and the + programs all go the same speed, the races used to be pretty boring. To + make things more interesting, they introduced a new rule to the races: + programs are allowed to cheat. + + The rules for cheating are very strict. Exactly once during a race, a + program may disable collision for up to 2 picoseconds. This allows the + program to pass through walls as if they were regular track. At the end of + the cheat, the program must be back on normal track again; otherwise, it + will receive a [18]segmentation fault and get disqualified. + + So, a program could complete the course in 72 picoseconds (saving 12 + picoseconds) by cheating for the two moves marked 1 and 2: + + ############### + #...#...12....# + #.#.#.#.#.###.# + #S#...#.#.#...# + #######.#.#.### + #######.#.#...# + #######.#.###.# + ###..E#...#...# + ###.#######.### + #...###...#...# + #.#####.#.###.# + #.#...#.#.#...# + #.#.#.#.#.#.### + #...#...#...### + ############### + + Or, a program could complete the course in 64 picoseconds (saving 20 + picoseconds) by cheating for the two moves marked 1 and 2: + + ############### + #...#...#.....# + #.#.#.#.#.###.# + #S#...#.#.#...# + #######.#.#.### + #######.#.#...# + #######.#.###.# + ###..E#...12..# + ###.#######.### + #...###...#...# + #.#####.#.###.# + #.#...#.#.#...# + #.#.#.#.#.#.### + #...#...#...### + ############### + + This cheat saves 38 picoseconds: + + ############### + #...#...#.....# + #.#.#.#.#.###.# + #S#...#.#.#...# + #######.#.#.### + #######.#.#...# + #######.#.###.# + ###..E#...#...# + ###.####1##.### + #...###.2.#...# + #.#####.#.###.# + #.#...#.#.#...# + #.#.#.#.#.#.### + #...#...#...### + ############### + + This cheat saves 64 picoseconds and takes the program directly to the end: + + ############### + #...#...#.....# + #.#.#.#.#.###.# + #S#...#.#.#...# + #######.#.#.### + #######.#.#...# + #######.#.###.# + ###..21...#...# + ###.#######.### + #...###...#...# + #.#####.#.###.# + #.#...#.#.#...# + #.#.#.#.#.#.### + #...#...#...### + ############### + + Each cheat has a distinct start position (the position where the cheat is + activated, just before the first move that is allowed to go through walls) + and end position; cheats are uniquely identified by their start position + and end position. + + In this example, the total number of cheats (grouped by the amount of time + they save) are as follows: + + • There are 14 cheats that save 2 picoseconds. + • There are 14 cheats that save 4 picoseconds. + • There are 2 cheats that save 6 picoseconds. + • There are 4 cheats that save 8 picoseconds. + • There are 2 cheats that save 10 picoseconds. + • There are 3 cheats that save 12 picoseconds. + • There is one cheat that saves 20 picoseconds. + • There is one cheat that saves 36 picoseconds. + • There is one cheat that saves 38 picoseconds. + • There is one cheat that saves 40 picoseconds. + • There is one cheat that saves 64 picoseconds. + + You aren't sure what the conditions of the racetrack will be like, so to + give yourself as many options as possible, you'll need a list of the best + cheats. How many cheats would save you at least 100 picoseconds? + + Your puzzle answer was 1389. + +--- Part Two --- + + The programs seem perplexed by your list of cheats. Apparently, the + two-picosecond cheating rule was deprecated several milliseconds ago! The + latest version of the cheating rule permits a single cheat that instead + lasts at most 20 picoseconds. + + Now, in addition to all the cheats that were possible in just two + picoseconds, many more cheats are possible. This six-picosecond cheat + saves 76 picoseconds: + + ############### + #...#...#.....# + #.#.#.#.#.###.# + #S#...#.#.#...# + #1#####.#.#.### + #2#####.#.#...# + #3#####.#.###.# + #456.E#...#...# + ###.#######.### + #...###...#...# + #.#####.#.###.# + #.#...#.#.#...# + #.#.#.#.#.#.### + #...#...#...### + ############### + + Because this cheat has the same start and end positions as the one above, + it's the same cheat, even though the path taken during the cheat is + different: + + ############### + #...#...#.....# + #.#.#.#.#.###.# + #S12..#.#.#...# + ###3###.#.#.### + ###4###.#.#...# + ###5###.#.###.# + ###6.E#...#...# + ###.#######.### + #...###...#...# + #.#####.#.###.# + #.#...#.#.#...# + #.#.#.#.#.#.### + #...#...#...### + ############### + + Cheats don't need to use all 20 picoseconds; cheats can last any amount of + time up to and including 20 picoseconds (but can still only end when the + program is on normal track). Any cheat time not used is lost; it can't be + saved for another cheat later. + + You'll still need a list of the best cheats, but now there are even more + to choose between. Here are the quantities of cheats in this example that + save 50 picoseconds or more: + + • There are 32 cheats that save 50 picoseconds. + • There are 31 cheats that save 52 picoseconds. + • There are 29 cheats that save 54 picoseconds. + • There are 39 cheats that save 56 picoseconds. + • There are 25 cheats that save 58 picoseconds. + • There are 23 cheats that save 60 picoseconds. + • There are 20 cheats that save 62 picoseconds. + • There are 19 cheats that save 64 picoseconds. + • There are 12 cheats that save 66 picoseconds. + • There are 14 cheats that save 68 picoseconds. + • There are 12 cheats that save 70 picoseconds. + • There are 22 cheats that save 72 picoseconds. + • There are 4 cheats that save 74 picoseconds. + • There are 3 cheats that save 76 picoseconds. + + Find the best cheats using the updated cheating rules. How many cheats + would save you at least 100 picoseconds? + + Your puzzle answer was 1005068. + + 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 + 14. https://adventofcode.com/2024/sponsors + 16. https://adventofcode.com/2017/day/24 + 17. https://en.wikipedia.org/wiki/Lock_(computer_science) + 18. https://en.wikipedia.org/wiki/Segmentation_fault + 19. https://adventofcode.com/2024 + 20. https://adventofcode.com/2024/day/20/input