147 lines
5.8 KiB
Plaintext
147 lines
5.8 KiB
Plaintext
|
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
|