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
|
#advent of code 2018
#day 23
#part 1 and part 2
f = open("input.txt",'r');
Testing = False;
#Testing = True;
if Testing:
f.close();
f = open("testinput.txt",'r');
def manhattan(pos1, pos2):
mx = abs(pos1[0] - pos2[0]);
my = abs(pos1[1] - pos2[1]);
mz = abs(pos1[2] - pos2[2]);
return mx + my + mz;
class nanobot:
def __init__(self, pos, r):
self.pos = pos;
self.radius = r;
def __str__(self):
return f'pos={self.pos}, r={self.radius}';
bots = [];
for l in f:
l = l.replace("<","(");
l = l.replace(">",")");
l = l.replace("r=","");
l = l.replace("pos=","");
p, r = eval(l);
bots.append(nanobot(p,r));
f.close();
strongest_radius = 0;
strongest_pos = None;
for bot in bots:
if bot.radius > strongest_radius:
strongest_radius = bot.radius;
strongest_pos = bot.pos;
part1 = 0;
for bot in bots:
if (manhattan(strongest_pos, bot.pos) <= strongest_radius): part1 += 1;
print("part1 = ", part1);
|