-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday11.cpp
216 lines (165 loc) · 7.03 KB
/
day11.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
/*
--- Day 11: Radioisotope Thermoelectric Generators ---
You come upon a column of four floors that have been entirely sealed off from
the rest of the building except for a small dedicated lobby. There are some
radiation warnings and a big sign which reads "Radioisotope Testing Facility".
According to the project status board, this facility is currently being used to
experiment with Radioisotope Thermoelectric Generators (RTGs, or simply
"generators") that are designed to be paired with specially-constructed
microchips. Basically, an RTG is a highly radioactive rock that generates
electricity through heat.
The experimental RTGs have poor radiation containment, so they're dangerously
radioactive. The chips are prototypes and don't have normal radiation
shielding, but they do have the ability to generate an electromagnetic
radiation shield when powered. Unfortunately, they can only be powered by their
corresponding RTG. An RTG powering a microchip is still dangerous to other
microchips.
In other words, if a chip is ever left in the same area as another RTG, and
it's not connected to its own RTG, the chip will be fried. Therefore, it is
assumed that you will follow procedure and keep chips connected to their
corresponding RTG when they're in the same room, and away from other RTGs
otherwise.
These microchips sound very interesting and useful to your current activities,
and you'd like to try to retrieve them. The fourth floor of the facility has an
assembling machine which can make a self-contained, shielded computer for you
to take with you - that is, if you can bring it all of the RTGs and microchips.
Within the radiation-shielded part of the facility (in which it's safe to have
these pre-assembly RTGs), there is an elevator that can move between the four
floors. Its capacity rating means it can carry at most yourself and two RTGs or
microchips in any combination. (They're rigged to some heavy diagnostic
equipment - the assembling machine will detach it for you.) As a security
measure, the elevator will only function if it contains at least one RTG or
microchip. The elevator always stops on each floor to recharge, and this takes
long enough that the items within it and the items on that floor can irradiate
each other. (You can prevent this if a Microchip and its Generator end up on
the same floor in this way, as they can be connected while the elevator is
recharging.)
You make some notes of the locations of each component of interest (your puzzle
input). Before you don a hazmat suit and start moving things around, you'd like
to have an idea of what you need to do.
When you enter the containment area, you and the elevator will start on the
first floor.
For example, suppose the isolated area has the following arrangement:
The first floor contains a hydrogen-compatible microchip and a lithium-
compatible microchip.
The second floor contains a hydrogen generator.
The third floor contains a lithium generator.
The fourth floor contains nothing relevant.
As a diagram (F# for a Floor number, E for Elevator, H for Hydrogen, L for
Lithium, M for Microchip, and G for Generator), the initial state looks like
this:
F4 . . . . .
F3 . . . LG .
F2 . HG . . .
F1 E . HM . LM
Then, to get everything up to the assembling machine on the fourth floor, the
following steps could be taken:
Bring the Hydrogen-compatible Microchip to the second floor, which is safe
because it can get power from the Hydrogen Generator:
F4 . . . . .
F3 . . . LG .
F2 E HG HM . .
F1 . . . . LM
Bring both Hydrogen-related items to the third floor, which is safe because the
Hydrogen-compatible microchip is getting power from its generator:
F4 . . . . .
F3 E HG HM LG .
F2 . . . . .
F1 . . . . LM
Leave the Hydrogen Generator on floor three, but bring the Hydrogen-compatible
Microchip back down with you so you can still use the elevator:
F4 . . . . .
F3 . HG . LG .
F2 E . HM . .
F1 . . . . LM
At the first floor, grab the Lithium-compatible Microchip, which is safe
because Microchips don't affect each other:
F4 . . . . .
F3 . HG . LG .
F2 . . . . .
F1 E . HM . LM
Bring both Microchips up one floor, where there is nothing to fry them:
F4 . . . . .
F3 . HG . LG .
F2 E . HM . LM
F1 . . . . .
Bring both Microchips up again to floor three, where they can be temporarily
connected to their corresponding generators while the elevator recharges,
preventing either of them from being fried:
F4 . . . . .
F3 E HG HM LG LM
F2 . . . . .
F1 . . . . .
Bring both Microchips to the fourth floor:
F4 E . HM . LM
F3 . HG . LG .
F2 . . . . .
F1 . . . . .
Leave the Lithium-compatible microchip on the fourth floor, but bring the
Hydrogen-compatible one so you can still use the elevator; this is safe because
although the Lithium Generator is on the destination floor, you can connect
Hydrogen-compatible microchip to the Hydrogen Generator there:
F4 . . . . LM
F3 E HG HM LG .
F2 . . . . .
F1 . . . . .
Bring both Generators up to the fourth floor, which is safe because you can
connect the Lithium-compatible Microchip to the Lithium Generator upon arrival:
F4 E HG . LG LM
F3 . . HM . .
F2 . . . . .
F1 . . . . .
Bring the Lithium Microchip with you to the third floor so you can use the
elevator:
F4 . HG . LG .
F3 E . HM . LM
F2 . . . . .
F1 . . . . .
Bring both Microchips to the fourth floor:
F4 E HG HM LG LM
F3 . . . . .
F2 . . . . .
F1 . . . . .
In this arrangement, it takes 11 steps to collect all of the objects at the
fourth floor for assembly. (Each elevator stop counts as one step, even if
nothing is added to or removed from it.)
In your situation, what is the minimum number of steps required to bring all of
the objects to the fourth floor?
--- Part Two ---
You step into the cleanroom separating the lobby from the isolated area and put
on the hazmat suit.
Upon entering the isolated containment area, however, you notice some extra
parts on the first floor that weren't listed on the record outside:
- An elerium generator.
- An elerium-compatible microchip.
- A dilithium generator.
- A dilithium-compatible microchip.
These work just like the other generators and microchips. You'll have to get
them up to assembly as well.
What is the minimum number of steps required to bring all of the objects,
including these four new ones, to the fourth floor?
*/
#include <iostream>
#include <limits>
#include <map>
#include <sstream>
#include "day11.h"
#include "main.h"
int mainfunc( std::istream& is, std::ostream& os, Part part ) {
ContainmentFloors floors( 0 );
floors.parse( is );
if ( part == Part::PART2 ) {
std::istringstream extraStuff (
// NB. No \n. All on the first floor.
"An elerium generator."
"An elerium-compatible microchip."
"A dilithium generator."
"A dilithium-compatible microchip."
);
floors.parse( extraStuff );
}
Simulate sim;
unsigned numSteps = sim.simulate( floors ) ;
os << numSteps << std::endl;
return 0;
}