def isImpacted(x: int, y: int): if x < 0 or y < 0: return 0 runner = Intcode(verbose=False) runner.initProgram(data, inputStream=[x, y], stallOnOutput=True) runner.runProgram() assert (runner.readOutput) return runner.retVal == 1
def paint(data: list, grid: defaultdict): runner = Intcode(verbose=False) currentPos = Point(x=0, y=0) currentDir = Direction.N runner.initProgram(list(data), stallOnOutput=True) runner.runProgram() while runner.eop is False: if runner.needsInput: runner.runProgram(inputStream=[grid[currentPos].type]) paint = None dir = None if runner.readOutput: paint = runner.retVal runner.runProgram() if runner.readOutput: dir = runner.retVal runner.runProgram() grid[currentPos].type = paint grid[currentPos].count += 1 currentDir = currentDir.getNextDir(dir) currentPos = currentPos.move(currentDir)
'north', # Passages 'west', # Science Lab 'south', # Storage 'take antenna', 'north', 'east', 'south', # Sick Bay 'west', # Hull Breach 'north', # Holodeck 'take fixed point', 'north', 'east', 'south' ] inputStream = [ord(x) for line in commands for x in line + '\n'] runner = Intcode(verbose=False) runner.initProgram(data, stallOnOutput=True) runner.runProgram(inputStream=inputStream) # Part 1 while runner.eop is False: while runner.readOutput: print(chr(runner.retVal), end='') runner.runProgram() if runner.needsInput: myInput = input("Input: ") + "\n" assert ('\n' in myInput) runner.runProgram(inputStream=[ord(x) for x in myInput]) # Part 2 # Click a button and you're done!
return Direction.N def getManhattanDist(self, other): return abs(self.x - other.x) + abs(self.y - other.y) class GridType(Enum): UNKNOWN = 0 SCAFFOLD = 1 EMPTY = 2 ROBOT = 3 runner = Intcode(verbose=False) runner.initProgram(data, stallOnOutput=True) runner.runProgram() grid = {} startPos = Point(0, 0) currentX = 0 currentY = 0 while runner.eop is False: assert (runner.readOutput) output = runner.retVal if output == 35: grid[Point.Create(startPos)] = GridType.SCAFFOLD.value startPos = startPos.move(Direction.E) elif output == 46: grid[Point.Create(startPos)] = GridType.EMPTY.value
from intcode import Intcode with open("../input/day5.txt", 'r') as inputFile: data = [int(x) for x in inputFile.read().split(",")] runner = Intcode(verbose=False) # Part1 runner.initProgram(list(data), inputStream=[1]) print("Part1:", runner.runProgram()) # Part2 runner.initProgram(list(data), inputStream=[5]) print("Part2:", runner.runProgram(list(data)))
with open("../input/day2.txt", 'r') as inputFile: data = [int(x) for x in inputFile.read().split(",")] def setInputs(program: list, noun: int, verb: int): program[1] = noun program[2] = verb # Part 1 part1 = list(data) setInputs(part1, 12, 2) runner = Intcode() runner.initProgram(part1) print("Part1:", runner.runProgram()) # Part 2 answer = 0 nounPoss = list(range(0, 100)) verbPoss = list(range(0, 100)) shouldBreak = False for noun in nounPoss: for verb in verbPoss: part2 = list(data) setInputs(part2, noun, verb) runner.initProgram(part2) ret = runner.runProgram() if ret == 19690720: answer = (100 * noun) + verb print("Part2:", answer)
from intcode import Intcode with open("../input/day13.txt", 'r') as inputFile: splitData = inputFile.read().split(",") data = [int(x) for x in splitData] def getNumBlocks(tiles: dict, blockType: int): return sum([1 if id == blockType else 0 for _, id in tiles.items()]) # Part 1 runner = Intcode(verbose=False) runner.initProgram(data, stallOnOutput=True) tiles = {} runner.runProgram() while runner.eop is False: assert (runner.readOutput) x = runner.retVal runner.runProgram() assert (runner.readOutput) y = runner.retVal runner.runProgram() assert (runner.readOutput) id = runner.retVal runner.runProgram() tiles[(x, y)] = id print("Part1:", getNumBlocks(tiles, 2))
class GridType(Enum): UNKNOWN = 0 WALL = 1 EMPTY = 2 OXYGEN = 3 with open("../input/day15.txt", 'r') as inputFile: splitData = inputFile.read().split(",") data = [int(x) for x in splitData] runner = Intcode(verbose=False) runner.initProgram(data, stallOnOutput=True) runner.runProgram() grid = defaultdict(int) currentPos = Point(0, 0) currentDir = Direction.N currentHis = deque([currentPos]) grid[Point.Create(currentPos)] = GridType.EMPTY.value visited = set() stack = deque() stack.appendleft((Point(-1, 0), deque([currentPos]))) stack.appendleft((Point(1, 0), deque([currentPos]))) stack.appendleft((Point(0, -1), deque([currentPos]))) stack.appendleft((Point(0, 1), deque([currentPos]))) finalHist = None