Esempio n. 1
0
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
Esempio n. 2
0
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)
Esempio n. 3
0
    '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!
Esempio n. 4
0
            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
Esempio n. 5
0
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)))
Esempio n. 6
0
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)
Esempio n. 7
0
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))

Esempio n. 8
0

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