-
Notifications
You must be signed in to change notification settings - Fork 0
/
day5_part1.py
69 lines (61 loc) · 4.06 KB
/
day5_part1.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
memory = [3,225,1,225,6,6,1100,1,238,225,104,0,1102,35,92,225,1101,25,55,225,1102,47,36,225,1102,17,35,225,1,165,18,224,1001,224,-106,224,4,224,102,8,223,223,1001,224,3,224,1,223,224,223,1101,68,23,224,101,-91,224,224,4,224,102,8,223,223,101,1,224,224,1,223,224,223,2,217,13,224,1001,224,-1890,224,4,224,102,8,223,223,1001,224,6,224,1,224,223,223,1102,69,77,224,1001,224,-5313,224,4,224,1002,223,8,223,101,2,224,224,1,224,223,223,102,50,22,224,101,-1800,224,224,4,224,1002,223,8,223,1001,224,5,224,1,224,223,223,1102,89,32,225,1001,26,60,224,1001,224,-95,224,4,224,102,8,223,223,101,2,224,224,1,223,224,223,1102,51,79,225,1102,65,30,225,1002,170,86,224,101,-2580,224,224,4,224,102,8,223,223,1001,224,6,224,1,223,224,223,101,39,139,224,1001,224,-128,224,4,224,102,8,223,223,101,3,224,224,1,223,224,223,1102,54,93,225,4,223,99,0,0,0,677,0,0,0,0,0,0,0,0,0,0,0,1105,0,99999,1105,227,247,1105,1,99999,1005,227,99999,1005,0,256,1105,1,99999,1106,227,99999,1106,0,265,1105,1,99999,1006,0,99999,1006,227,274,1105,1,99999,1105,1,280,1105,1,99999,1,225,225,225,1101,294,0,0,105,1,0,1105,1,99999,1106,0,300,1105,1,99999,1,225,225,225,1101,314,0,0,106,0,0,1105,1,99999,1008,677,677,224,1002,223,2,223,1005,224,329,101,1,223,223,7,677,677,224,102,2,223,223,1006,224,344,101,1,223,223,108,677,677,224,1002,223,2,223,1006,224,359,1001,223,1,223,7,677,226,224,1002,223,2,223,1005,224,374,1001,223,1,223,1107,677,226,224,1002,223,2,223,1005,224,389,1001,223,1,223,107,226,677,224,102,2,223,223,1005,224,404,1001,223,1,223,1108,226,677,224,1002,223,2,223,1006,224,419,101,1,223,223,107,226,226,224,102,2,223,223,1005,224,434,1001,223,1,223,108,677,226,224,1002,223,2,223,1006,224,449,101,1,223,223,108,226,226,224,102,2,223,223,1006,224,464,1001,223,1,223,1007,226,226,224,1002,223,2,223,1005,224,479,101,1,223,223,8,677,226,224,1002,223,2,223,1006,224,494,101,1,223,223,1007,226,677,224,102,2,223,223,1006,224,509,101,1,223,223,7,226,677,224,1002,223,2,223,1005,224,524,101,1,223,223,107,677,677,224,102,2,223,223,1005,224,539,101,1,223,223,1008,677,226,224,1002,223,2,223,1005,224,554,1001,223,1,223,1008,226,226,224,1002,223,2,223,1006,224,569,1001,223,1,223,1108,226,226,224,102,2,223,223,1005,224,584,101,1,223,223,1107,226,677,224,1002,223,2,223,1005,224,599,1001,223,1,223,8,226,677,224,1002,223,2,223,1006,224,614,1001,223,1,223,1108,677,226,224,102,2,223,223,1005,224,629,1001,223,1,223,8,226,226,224,1002,223,2,223,1005,224,644,1001,223,1,223,1107,677,677,224,1002,223,2,223,1005,224,659,1001,223,1,223,1007,677,677,224,1002,223,2,223,1005,224,674,101,1,223,223,4,223,99,226]
def getParams(command):
pmodes = []
pmode = []
params = []
global code
pmode = str(int(command[0]/100))
print("Command: " + str(command))
i = len(pmode)-1
while i >= 0:
pmodes.append(int(pmode[i]))
i-=1
pmodes.extend([0] * (len(command) - 2 - len(pmodes)))
print("pmodes: " + str(pmodes))
i= 0
while i < len(pmodes):
if pmodes[i] == 1:
params.append(command[i+1])
elif pmodes[i] == 0:
params.append(code[command[i+1]])
i+=1
print("params: " + str(params))
return(params)
op_code = 0
p1 = 0
p2 = 0
p3 = 0
code = memory.copy()
code[225] = 1
pointer = 2
while pointer < len(code):
if code[pointer] == 99:
print("CODE 99 FOUND - EXIT PROGRAM")
break
else:
op_code = abs(code[pointer]) % 100
if op_code == 1:
[p1,p2] = getParams(code[pointer:pointer+4])
p3 = code[pointer+3]
print("INSTRUCTION: (%d, %d, %d, %d)" % (op_code, p1, p2, p3))
code[p3] = p1 + p2
pointer += 4
elif op_code == 2:
[p1,p2] = getParams(code[pointer:pointer+4])
p3 = code[pointer+3]
print("INSTRUCTION: (%d, %d, %d, %d)" % (op_code, p1, p2, p3))
code[p3] = p1 * p2
pointer += 4
elif op_code == 3:
p1 = code[pointer + 1]
print("INPUT INSTRUCTION: (%d, %d)" % (op_code, p1))
pointer += 2
elif op_code == 4:
[p1] = getParams(code[pointer:pointer+2])
print("OUTPUT INSTRUCTION: (%d, %d)" % (op_code, p1))
print ("Output = %d" % p1)
pointer += 2
else:
print("ERROR: INVALID CODE")
break
#print(code)