Skip to content

Commit

Permalink
Day 9 solution
Browse files Browse the repository at this point in the history
  • Loading branch information
maxdavidson91 authored Feb 14, 2020
1 parent 09d3168 commit 5ff8acd
Show file tree
Hide file tree
Showing 2 changed files with 94 additions and 0 deletions.
92 changes: 92 additions & 0 deletions day-09/day-09.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
def get_data(file):
with open(file, 'r') as f:
data = list(map(int, f.read().split(',')))
return data


def parameters(data, instruction, index, relative_base):
# param1
if int(instruction[2]) == 0:
para1 = data[index + 1]
elif int(instruction[2]) == 1:
para1 = index + 1
elif int(instruction[2]) == 2:
para1 = relative_base + data[index + 1]

# param2
if int(instruction[1]) == 0:
para2 = data[index + 2]
elif int(instruction[1]) == 1:
para2 = index + 2
elif int(instruction[1]) == 2 :
para2 = relative_base + data[index + 2]

# param3
if int(instruction[0]) == 0:
para3 = data[index + 3]
elif int(instruction[0]) == 1 :
para3 = index + 3
elif int(instruction[0]) == 2:
para3 = relative_base + data[index + 3]

return para1, para2, para3


def intcode_computer(intcodes, input_value):
index = 0
input_counter = 0
relative_base = 0
output = 0
new_base = 0
while index < len(intcodes) -1:
instruction = "%05d" % intcodes[index]
opcode = int(instruction[3:])
param1, param2, param3 = parameters(intcodes, instruction, index, relative_base)
if opcode == 1:
intcodes[param3] = intcodes[param1] + intcodes[param2]
index += 4
elif opcode == 2:
intcodes[param3] = intcodes[param1] * intcodes[param2]
index += 4
elif opcode == 3:
intcodes[param1] = input_value
index += 2
elif opcode == 4:
output = intcodes[param1]
print('Output at opcode 4', output)
index += 2
elif opcode == 5:
if intcodes[param1] != 0:
index = intcodes[param2]
else:
index += 3
elif opcode == 6:
if intcodes[param1] == 0:
index = intcodes[param2]
else:
index += 3
elif opcode == 7:
if intcodes[param1] < intcodes[param2]:
intcodes[param3] = 1
else:
intcodes[param3] = 0
index += 4
elif opcode == 8:
if intcodes[param1] == intcodes[param2]:
intcodes[param3] = 1
else:
intcodes[param3] = 0
index += 4
elif opcode == 9:
relative_base += intcodes[param1]
index += 2
elif opcode == 99:
return output


int_codes = get_data('input')
padding = [0] * 10000000
int_codes += padding
print('Part 1 - Final output: ', intcode_computer(int_codes, 1))
print('Part 2 - Final output: ', intcode_computer(int_codes, 2))

2 changes: 2 additions & 0 deletions day-09/input
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
1102,34463338,34463338,63,1007,63,34463338,63,1005,63,53,1101,3,0,1000,109,988,209,12,9,1000,209,6,209,3,203,0,1008,1000,1,63,1005,63,65,1008,1000,2,63,1005,63,904,1008,1000,0,63,1005,63,58,4,25,104,0,99,4,0,104,0,99,4,17,104,0,99,0,0,1101,34,0,1013,1101,20,0,1012,1101,536,0,1023,1101,0,23,1006,1102,1,543,1022,1102,1,27,1003,1102,25,1,1014,1102,1,29,1009,1101,0,686,1025,1101,0,30,1004,1102,1,28,1017,1102,1,35,1016,1101,765,0,1028,1102,1,33,1002,1102,1,26,1000,1102,1,822,1027,1102,1,21,1001,1102,1,1,1021,1101,31,0,1007,1101,0,39,1010,1102,36,1,1019,1101,0,32,1015,1101,0,38,1018,1101,0,24,1005,1101,22,0,1011,1101,756,0,1029,1102,1,0,1020,1102,829,1,1026,1102,1,37,1008,1101,0,695,1024,109,19,1205,2,195,4,187,1105,1,199,1001,64,1,64,1002,64,2,64,109,7,1205,-6,215,1001,64,1,64,1105,1,217,4,205,1002,64,2,64,109,-16,21108,40,42,5,1005,1015,233,1106,0,239,4,223,1001,64,1,64,1002,64,2,64,109,-13,2102,1,5,63,1008,63,33,63,1005,63,261,4,245,1105,1,265,1001,64,1,64,1002,64,2,64,109,29,21101,41,0,-9,1008,1017,41,63,1005,63,291,4,271,1001,64,1,64,1105,1,291,1002,64,2,64,109,-22,2107,27,-4,63,1005,63,307,1105,1,313,4,297,1001,64,1,64,1002,64,2,64,109,7,1207,-4,30,63,1005,63,333,1001,64,1,64,1106,0,335,4,319,1002,64,2,64,109,1,21108,42,42,6,1005,1018,353,4,341,1105,1,357,1001,64,1,64,1002,64,2,64,109,14,21101,43,0,-7,1008,1019,41,63,1005,63,377,1106,0,383,4,363,1001,64,1,64,1002,64,2,64,109,-8,21102,44,1,-1,1008,1017,47,63,1005,63,407,1001,64,1,64,1105,1,409,4,389,1002,64,2,64,109,-15,2101,0,2,63,1008,63,25,63,1005,63,433,1001,64,1,64,1105,1,435,4,415,1002,64,2,64,109,7,1201,-8,0,63,1008,63,30,63,1005,63,455,1105,1,461,4,441,1001,64,1,64,1002,64,2,64,109,-12,2108,37,10,63,1005,63,483,4,467,1001,64,1,64,1106,0,483,1002,64,2,64,109,13,21107,45,44,0,1005,1011,499,1105,1,505,4,489,1001,64,1,64,1002,64,2,64,109,-2,2107,20,-8,63,1005,63,523,4,511,1106,0,527,1001,64,1,64,1002,64,2,64,109,20,2105,1,-6,1001,64,1,64,1105,1,545,4,533,1002,64,2,64,109,-28,2102,1,1,63,1008,63,30,63,1005,63,565,1105,1,571,4,551,1001,64,1,64,1002,64,2,64,109,20,1206,0,583,1105,1,589,4,577,1001,64,1,64,1002,64,2,64,109,-7,1206,6,603,4,595,1106,0,607,1001,64,1,64,1002,64,2,64,109,-14,2101,0,2,63,1008,63,33,63,1005,63,629,4,613,1105,1,633,1001,64,1,64,1002,64,2,64,109,-4,1208,8,30,63,1005,63,655,4,639,1001,64,1,64,1105,1,655,1002,64,2,64,109,23,21107,46,47,0,1005,1019,673,4,661,1105,1,677,1001,64,1,64,1002,64,2,64,109,-2,2105,1,7,4,683,1001,64,1,64,1106,0,695,1002,64,2,64,109,3,21102,47,1,-7,1008,1013,47,63,1005,63,717,4,701,1105,1,721,1001,64,1,64,1002,64,2,64,109,-11,1202,-7,1,63,1008,63,32,63,1005,63,745,1001,64,1,64,1105,1,747,4,727,1002,64,2,64,109,10,2106,0,9,4,753,1001,64,1,64,1105,1,765,1002,64,2,64,109,-24,1207,8,28,63,1005,63,783,4,771,1106,0,787,1001,64,1,64,1002,64,2,64,109,5,1201,0,0,63,1008,63,26,63,1005,63,813,4,793,1001,64,1,64,1105,1,813,1002,64,2,64,109,28,2106,0,-1,1001,64,1,64,1105,1,831,4,819,1002,64,2,64,109,-22,1202,-1,1,63,1008,63,24,63,1005,63,857,4,837,1001,64,1,64,1106,0,857,1002,64,2,64,109,-9,2108,30,6,63,1005,63,873,1106,0,879,4,863,1001,64,1,64,1002,64,2,64,109,-2,1208,10,26,63,1005,63,899,1001,64,1,64,1106,0,901,4,885,4,64,99,21102,1,27,1,21101,0,915,0,1105,1,922,21201,1,25948,1,204,1,99,109,3,1207,-2,3,63,1005,63,964,21201,-2,-1,1,21101,942,0,0,1106,0,922,22101,0,1,-1,21201,-2,-3,1,21102,957,1,0,1105,1,922,22201,1,-1,-2,1106,0,968,21201,-2,0,-2,109,-3,2106,0,0

0 comments on commit 5ff8acd

Please sign in to comment.