153 lines
4.9 KiB
Markdown
153 lines
4.9 KiB
Markdown
--- Day 5: If You Give A Seed A Fertilizer ---
|
|
|
|
You take the boat and find the gardener right where you were told he would be:
|
|
managing a giant "garden" that looks more to you like a farm.
|
|
|
|
"A water source? Island Island is the water source!" You point out that Snow
|
|
Island isn't receiving any water.
|
|
|
|
"Oh, we had to stop the water because we ran out of sand to filter it with!
|
|
Can't make snow with dirty water. Don't worry, I'm sure we'll get more sand
|
|
soon; we only turned off the water a few days... weeks... oh no." His face sinks
|
|
into a look of horrified realization.
|
|
|
|
"I've been so busy making sure everyone here has food that I completely forgot
|
|
to check why we stopped getting more sand! There's a ferry leaving soon that is
|
|
headed over in that direction - it's much faster than your boat. Could you
|
|
please go check it out?"
|
|
|
|
You barely have time to agree to this request when he brings up another. "While
|
|
you wait for the ferry, maybe you can help us with our food production problem.
|
|
The latest Island Island Almanac just arrived and we're having trouble making
|
|
sense of it."
|
|
|
|
The almanac (your puzzle input) lists all of the seeds that need to be planted.
|
|
It also lists what type of soil to use with each kind of seed, what type of
|
|
fertilizer to use with each kind of soil, what type of water to use with each
|
|
kind of fertilizer, and so on. Every type of seed, soil, fertilizer and so on is
|
|
identified with a number, but numbers are reused by each category - that is,
|
|
soil 123 and fertilizer 123 aren't necessarily related to each other.
|
|
|
|
For example:
|
|
|
|
```
|
|
seeds: 79 14 55 13
|
|
|
|
seed-to-soil map:
|
|
50 98 2
|
|
52 50 48
|
|
|
|
soil-to-fertilizer map:
|
|
0 15 37
|
|
37 52 2
|
|
39 0 15
|
|
|
|
fertilizer-to-water map:
|
|
49 53 8
|
|
0 11 42
|
|
42 0 7
|
|
57 7 4
|
|
|
|
water-to-light map:
|
|
88 18 7
|
|
18 25 70
|
|
|
|
light-to-temperature map:
|
|
45 77 23
|
|
81 45 19
|
|
68 64 13
|
|
|
|
temperature-to-humidity map:
|
|
0 69 1
|
|
1 0 69
|
|
|
|
humidity-to-location map:
|
|
60 56 37
|
|
56 93 4
|
|
```
|
|
|
|
The almanac starts by listing which seeds need to be planted: seeds 79, 14, 55,
|
|
and 13.
|
|
|
|
The rest of the almanac contains a list of maps which describe how to convert
|
|
numbers from a source category into numbers in a destination category. That is,
|
|
the section that starts with seed-to-soil map: describes how to convert a seed
|
|
number (the source) to a soil number (the destination). This lets the gardener
|
|
and his team know which soil to use with which seeds, which water to use with
|
|
which fertilizer, and so on.
|
|
|
|
Rather than list every source number and its corresponding destination number
|
|
one by one, the maps describe entire ranges of numbers that can be converted.
|
|
Each line within a map contains three numbers: the destination range start, the
|
|
source range start, and the range length.
|
|
|
|
Consider again the example seed-to-soil map:
|
|
|
|
```
|
|
50 98 2
|
|
52 50 48
|
|
```
|
|
|
|
The first line has a destination range start of 50, a source range start of 98,
|
|
and a range length of 2. This line means that the source range starts at 98 and
|
|
contains two values: 98 and 99. The destination range is the same length, but it
|
|
starts at 50, so its two values are 50 and 51. With this information, you know
|
|
that seed number 98 corresponds to soil number 50 and that seed number 99
|
|
corresponds to soil number 51.
|
|
|
|
The second line means that the source range starts at 50 and contains 48 values:
|
|
50, 51, ..., 96, 97. This corresponds to a destination range starting at 52 and
|
|
also containing 48 values: 52, 53, ..., 98, 99. So, seed number 53 corresponds
|
|
to soil number 55.
|
|
|
|
Any source numbers that aren't mapped correspond to the same destination number.
|
|
So, seed number 10 corresponds to soil number 10.
|
|
|
|
So, the entire list of seed numbers and their corresponding soil numbers looks
|
|
like this:
|
|
|
|
```
|
|
seed soil
|
|
0 0
|
|
1 1
|
|
... ...
|
|
48 48
|
|
49 49
|
|
50 52
|
|
51 53
|
|
... ...
|
|
96 98
|
|
97 99
|
|
98 50
|
|
99 51
|
|
```
|
|
|
|
With this map, you can look up the soil number required for each initial seed
|
|
number:
|
|
|
|
- Seed number 79 corresponds to soil number 81.
|
|
- Seed number 14 corresponds to soil number 14.
|
|
- Seed number 55 corresponds to soil number 57.
|
|
- Seed number 13 corresponds to soil number 13.
|
|
|
|
The gardener and his team want to get started as soon as possible, so they'd
|
|
like to know the closest location that needs a seed. Using these maps, find the
|
|
lowest location number that corresponds to any of the initial seeds. To do this,
|
|
you'll need to convert each seed number through other categories until you can
|
|
find its corresponding location number. In this example, the corresponding types
|
|
are:
|
|
|
|
- Seed 79, soil 81, fertilizer 81, water 81, light 74, temperature 78, humidity
|
|
78, location 82.
|
|
- Seed 14, soil 14, fertilizer 53, water 49, light 42, temperature 42, humidity
|
|
43, location 43.
|
|
- Seed 55, soil 57, fertilizer 57, water 53, light 46, temperature 82, humidity
|
|
82, location 86.
|
|
- Seed 13, soil 13, fertilizer 52, water 41, light 34, temperature 34, humidity
|
|
35, location 35.
|
|
|
|
So, the lowest location number in this example is 35.
|
|
|
|
What is the lowest location number that corresponds to any of the initial seed
|
|
numbers?
|