-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path11.py
127 lines (93 loc) · 4.48 KB
/
11.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
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
l = [3,8,1005,8,338,1106,0,11,0,0,0,104,1,104,0,3,8,1002,8,-1,10,1001,10,1,10,4,10,108,1,8,10,4,10,102,1,8,28,1,108,6,10,1,3,7,10,3,8,1002,8,-1,10,1001,10,1,10,4,10,108,1,8,10,4,10,1001,8,0,58,2,5,19,10,1,1008,7,10,2,105,6,10,1,1007,7,10,3,8,1002,8,-1,10,1001,10,1,10,4,10,1008,8,0,10,4,10,101,0,8,97,1006,0,76,1,106,14,10,2,9,9,10,1006,0,74,3,8,102,-1,8,10,101,1,10,10,4,10,108,1,8,10,4,10,1002,8,1,132,1006,0,0,2,1104,15,10,3,8,1002,8,-1,10,1001,10,1,10,4,10,1008,8,0,10,4,10,1001,8,0,162,1,1005,13,10,3,8,1002,8,-1,10,101,1,10,10,4,10,108,1,8,10,4,10,101,0,8,187,1,1,15,10,2,3,9,10,1006,0,54,3,8,102,-1,8,10,101,1,10,10,4,10,108,0,8,10,4,10,102,1,8,220,1,104,5,10,3,8,102,-1,8,10,101,1,10,10,4,10,1008,8,0,10,4,10,102,1,8,247,1,5,1,10,1,1109,2,10,3,8,1002,8,-1,10,101,1,10,10,4,10,1008,8,0,10,4,10,1001,8,0,277,1006,0,18,3,8,1002,8,-1,10,101,1,10,10,4,10,108,1,8,10,4,10,101,0,8,301,2,105,14,10,1,5,1,10,2,1009,6,10,1,3,0,10,101,1,9,9,1007,9,1054,10,1005,10,15,99,109,660,104,0,104,1,21101,0,47677546524,1,21101,0,355,0,1105,1,459,21102,936995299356,1,1,21101,0,366,0,1106,0,459,3,10,104,0,104,1,3,10,104,0,104,0,3,10,104,0,104,1,3,10,104,0,104,1,3,10,104,0,104,0,3,10,104,0,104,1,21101,0,206312807515,1,21102,1,413,0,1105,1,459,21101,206253871296,0,1,21102,424,1,0,1106,0,459,3,10,104,0,104,0,3,10,104,0,104,0,21102,1,709580554600,1,21102,1,447,0,1105,1,459,21101,0,868401967464,1,21101,458,0,0,1106,0,459,99,109,2,22102,1,-1,1,21102,1,40,2,21101,0,490,3,21102,480,1,0,1106,0,523,109,-2,2105,1,0,0,1,0,0,1,109,2,3,10,204,-1,1001,485,486,501,4,0,1001,485,1,485,108,4,485,10,1006,10,517,1101,0,0,485,109,-2,2105,1,0,0,109,4,2101,0,-1,522,1207,-3,0,10,1006,10,540,21102,0,1,-3,21201,-3,0,1,21202,-2,1,2,21101,0,1,3,21101,0,559,0,1105,1,564,109,-4,2106,0,0,109,5,1207,-3,1,10,1006,10,587,2207,-4,-2,10,1006,10,587,21202,-4,1,-4,1105,1,655,21201,-4,0,1,21201,-3,-1,2,21202,-2,2,3,21102,606,1,0,1105,1,564,22102,1,1,-4,21102,1,1,-1,2207,-4,-2,10,1006,10,625,21102,1,0,-1,22202,-2,-1,-2,2107,0,-3,10,1006,10,647,22101,0,-1,1,21101,0,647,0,106,0,522,21202,-2,-1,-2,22201,-4,-2,-4,109,-5,2106,0,0]
out = []
curr = 0
base = 0
l += [0] * 100000
painted = dict()
painted[(45,0)] = 1
currPos = (45, 0)
currDir = (0, -1)
while True:
if currPos in painted:
inp = painted[currPos]
else:
inp = 0
while True:
code = l[curr] % 100
mode1 = l[curr] // 100 % 10
mode2 = l[curr] // 1000 % 10
mode3 = l[curr] // 10000 % 10
baseInp1 = l[curr + 1]
inp2 = l[curr + 2]
inp3 = l[curr + 3]
if mode1 == 0:
inp1 = l[baseInp1]
elif mode1 == 1:
inp1 = baseInp1
elif mode1 == 2:
baseInp1 += base
inp1 = l[baseInp1]
if mode2 == 0:
inp2 = l[inp2]
elif mode2 == 2:
inp2 = l[inp2 + base]
if mode3 == 2:
inp3 += base
if code == 1:
l[inp3] = inp1 + inp2
curr += 4
elif code == 2:
l[inp3] = inp1 * inp2
curr += 4
elif code == 3:
l[baseInp1] = inp
curr += 2
elif code == 4:
out.append(inp1)
curr += 2
break
elif code == 5:
if inp1 != 0:
curr = inp2
else:
curr += 3
elif code == 6:
if inp1 == 0:
curr = inp2
else:
curr += 3
elif code == 7:
if inp1 < inp2:
outV = 1
else:
outV = 0
l[inp3] = outV
curr += 4
elif code == 8:
if inp1 == inp2:
outV = 1
else:
outV = 0
l[inp3] = outV
curr += 4
elif code == 9:
base += inp1
curr += 2
elif code == 99:
break
else:
print('Bad')
break
if len(out) == 0:
break
elif len(out) == 1:
pass
else:
assert (len(out) == 2)
painted[currPos] = out[0]
if out[1] == 0:
currDir = (-currDir[1], currDir[0])
else:
currDir = (currDir[1], -currDir[0])
currPos = (currPos[0] + currDir[0], currPos[1] + currDir[1])
out = []