day02 - the introduction of intcode
This commit is contained in:
parent
b50168fd3b
commit
fa1cd39f9a
33
day02.py
Normal file
33
day02.py
Normal file
@ -0,0 +1,33 @@
|
||||
from aoc import AOCDay
|
||||
from typing import Any
|
||||
|
||||
from intcode import IntCode
|
||||
|
||||
|
||||
class Day(AOCDay):
|
||||
test_solutions_p1 = [100, 2, 2, 2, 30]
|
||||
test_solutions_p2 = []
|
||||
|
||||
def part1(self) -> Any:
|
||||
memory = self.getInputAsArraySplit(',', int)
|
||||
memory[1] = 12
|
||||
memory[2] = 2
|
||||
comp = IntCode(memory, 100)
|
||||
comp.run()
|
||||
|
||||
return comp.memory[0]
|
||||
|
||||
def part2(self) -> Any:
|
||||
init_memory = self.getInputAsArraySplit(",", int)
|
||||
|
||||
for x in range(100):
|
||||
for y in range(100):
|
||||
memory = init_memory.copy()
|
||||
memory[1] = x
|
||||
memory[2] = y
|
||||
comp = IntCode(memory)
|
||||
comp.run()
|
||||
if comp.memory[0] == 19690720:
|
||||
return 100 * x + y
|
||||
|
||||
return -1
|
||||
1
inputs/input02
Normal file
1
inputs/input02
Normal file
@ -0,0 +1 @@
|
||||
1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,1,9,19,1,10,19,23,2,9,23,27,1,6,27,31,2,31,9,35,1,5,35,39,1,10,39,43,1,10,43,47,2,13,47,51,1,10,51,55,2,55,10,59,1,9,59,63,2,6,63,67,1,5,67,71,1,71,5,75,1,5,75,79,2,79,13,83,1,83,5,87,2,6,87,91,1,5,91,95,1,95,9,99,1,99,6,103,1,103,13,107,1,107,5,111,2,111,13,115,1,115,6,119,1,6,119,123,2,123,13,127,1,10,127,131,1,131,2,135,1,135,5,0,99,2,14,0,0
|
||||
1
inputs/test_input02_1_0
Normal file
1
inputs/test_input02_1_0
Normal file
@ -0,0 +1 @@
|
||||
1,9,10,3,2,3,11,0,99,30,40,50
|
||||
1
inputs/test_input02_1_1
Normal file
1
inputs/test_input02_1_1
Normal file
@ -0,0 +1 @@
|
||||
1,0,0,0,99
|
||||
1
inputs/test_input02_1_2
Normal file
1
inputs/test_input02_1_2
Normal file
@ -0,0 +1 @@
|
||||
2,3,0,3,99
|
||||
1
inputs/test_input02_1_3
Normal file
1
inputs/test_input02_1_3
Normal file
@ -0,0 +1 @@
|
||||
2,4,4,5,99,0
|
||||
1
inputs/test_input02_1_4
Normal file
1
inputs/test_input02_1_4
Normal file
@ -0,0 +1 @@
|
||||
1,1,1,4,99,5,6,0,99
|
||||
31
intcode.py
Normal file
31
intcode.py
Normal file
@ -0,0 +1,31 @@
|
||||
from typing import List
|
||||
|
||||
|
||||
class IntCode:
|
||||
def __init__(self, memory: List[int], mem_size: int = 0):
|
||||
self.instr_ptr = 0
|
||||
self.halted = False
|
||||
self.memory = memory
|
||||
if len(self.memory) < mem_size:
|
||||
self.memory.extend([0] * (mem_size - len(self.memory)))
|
||||
|
||||
def run(self):
|
||||
while not self.halted:
|
||||
instr = self.memory[self.instr_ptr]
|
||||
|
||||
if instr == 1:
|
||||
address1 = self.memory[self.instr_ptr + 1]
|
||||
address2 = self.memory[self.instr_ptr + 2]
|
||||
address3 = self.memory[self.instr_ptr + 3]
|
||||
self.memory[address3] = self.memory[address1] + self.memory[address2]
|
||||
self.instr_ptr += 4
|
||||
elif instr == 2:
|
||||
address1 = self.memory[self.instr_ptr + 1]
|
||||
address2 = self.memory[self.instr_ptr + 2]
|
||||
address3 = self.memory[self.instr_ptr + 3]
|
||||
self.memory[address3] = self.memory[address1] * self.memory[address2]
|
||||
self.instr_ptr += 4
|
||||
elif instr == 99:
|
||||
self.halted = True
|
||||
else:
|
||||
raise ValueError("Invalid instruction encountered at pos %d: %d" % (self.instr_ptr, instr))
|
||||
Loading…
Reference in New Issue
Block a user