-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsolution.py
80 lines (67 loc) · 2.01 KB
/
solution.py
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
def ExtendCluster(cluster):
nc = []
N = cluster.__len__()
nc.append(["." for i in range(N+2)])
nc.extend([["."] + x + ["."] for x in cluster])
nc.append(["." for i in range(N+2)])
return nc
def Move(d):
if d =="up": return -1, 0
if d =="right": return 0, 1
if d =="down": return 1, 0
if d =="left": return 0, -1
dir = ["up", "right", "down", "left"]
# First part
input = [list(x) for x in open("data.txt","r").read().split("\n")]
N = int((input.__len__()) / 2)
v = {"x": N, "y": N, "dir": "up"}
counter = 0
for i in range(10000):
# Turn
turn = 1 if input[v["y"]][v["x"]]=="#" else -1
v["dir"] = dir[(dir.index(v["dir"])+turn)%(dir.__len__())]
# Cure or infect
if input[v["y"]][v["x"]] == ".":
counter += 1
input[v["y"]][v["x"]] = "#"
else:
input[v["y"]][v["x"]] = "."
# Move
m = Move(v["dir"])
v["y"] += m[0]
v["x"] += m[1]
if v["y"] in [0, input.__len__()-1] or v["x"] in [0, input.__len__()-1]:
input = ExtendCluster(input)
v["y"] += 1
v["x"] += 1
print("First part: " + str(counter))
# Second part
input = [list(x) for x in open("data.txt","r").read().split("\n")]
N = int((input.__len__()) / 2)
v = {"x": N, "y": N, "dir": "up"}
counter = 0
for i in range(10000000):
# Turn then cure, weaken, flag or infect
if input[v["y"]][v["x"]] == ".":
turn = -1
input[v["y"]][v["x"]] = "W"
elif input[v["y"]][v["x"]] == "W":
turn = 0
input[v["y"]][v["x"]] = "#"
counter += 1
elif input[v["y"]][v["x"]] == "#":
turn = 1
input[v["y"]][v["x"]] = "F"
else:
turn = 2
input[v["y"]][v["x"]] = "."
v["dir"] = dir[(dir.index(v["dir"])+turn)%(dir.__len__())]
# Move
m = Move(v["dir"])
v["y"] += m[0]
v["x"] += m[1]
if v["y"] in [0, input.__len__()-1] or v["x"] in [0, input.__len__()-1]:
input = ExtendCluster(input)
v["y"] += 1
v["x"] += 1
print("Second part: " + str(counter))