-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path23a_aoc.py
90 lines (85 loc) · 2.59 KB
/
23a_aoc.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
class ProcessProgram():
def __init__(self):
self.regs = {"rip":0}
self.recieveQueue = []
for x in range(8):
self.regs[chr(ord('a')+x)] = 0
#self.regs['p'] = pid
self.other = None
self.times = 0
def process(self):
arg = program[self.regs['rip']]
arg = arg.split()
print arg, '\t\t', self.regs
if arg[0]=='snd':
if self.pid == 1:
timesSent += 1
if arg[1] in self.regs:
self.other.recieveQueue.insert(0,self.regs[arg[1]])
else:
self.other.recieveQueue.insert(0,int(arg[1]))
self.regs['rip'] += 1
return 1
elif arg[0]=='set':
if arg[2] in self.regs:
self.regs[arg[1]] = self.regs[arg[2]]
else:
self.regs[arg[1]] = int(arg[2])
elif arg[0]=='add':
if arg[2] in self.regs:
self.regs[arg[1]] += self.regs[arg[2]]
else:
self.regs[arg[1]] += int(arg[2])
elif arg[0]=='sub':
if arg[2] in self.regs:
self.regs[arg[1]] -= self.regs[arg[2]]
else:
self.regs[arg[1]] -= int(arg[2])
elif arg[0]=='mul':
if arg[2] in self.regs:
self.regs[arg[1]] *= self.regs[arg[2]]
else:
self.regs[arg[1]] *= int(arg[2])
self.times += 1
elif arg[0]=='mod':
if arg[2] in self.regs:
self.regs[arg[1]] %= self.regs[arg[2]]
else:
self.regs[arg[1]] %= int(arg[2])
elif arg[0]=='rcv':
if len(self.recieveQueue)>0:
self.regs[arg[1]] = self.recieveQueue.pop()
else:
self.regs['rip'] += 1
return -1
elif arg[0]=='jnz':
if arg[1] in self.regs:
z = self.regs[arg[1]]
else:
z = int(arg[1])
if z!=0:
if arg[2] in self.regs:
self.regs['rip'] += self.regs[arg[2]]
return 0
else:
self.regs['rip'] += int(arg[2])
return 0
self.regs['rip'] += 1
return 0
program = []
def main():
try:
while True:
process(raw_input())
except EOFError:
solve()
def process(arg):
program.append(arg)
def solve():
p = ProcessProgram()
#p.regs['a'] = 1
while p.regs['rip']<len(program):
p.process()
print p.regs
print p.times
main()