Exemplo n.º 1
0
 def test_day2_testinput2(self):
     code_day2 = ic.parse_code(
         'C:/Users/Admin/Documents/Code/advent_of_code/2019/5/testinput2.txt'
     )
     day2 = ic.Intcode(code_day2)
     day2.run(debug=False)
     self.assertEqual({0: 1101, 1: 100, 2: -1, 3: 4, 4: 99}, day2.code)
Exemplo n.º 2
0
 def test_day7_part2(self):
     code = ic.parse_code(
         'C:/Users/Admin/Documents/Code/advent_of_code/2019/7/input.txt')
     seqs = list(itertools.permutations(range(5, 10), 5))
     max_results = []
     for seq in seqs:
         results = []
         amps = []
         inp2 = 0
         for i in range(5):
             inp1 = seq[i]
             amps.append(ic.Intcode(code))
             #print("inp1:", inp1, "inp2:", inp2)
             inp2 = amps[i].run([inp1, inp2], reset=False, debug=False)
             #print("*** OUTPUT:", inp2)
         while True:
             i += 1
             i = i % len(seq)
             inp1 = seq[i]
             #print("inp2:", inp2)
             inp2 = amps[i].run([inp2], reset=False, debug=False)
             #print("*** OUTPUT:", inp2)
             if i == 4:
                 results.append(inp2)
             if i == 4 and amps[i].code[amps[i].pointer] == 99:
                 break
         max_results.append(max(results))
     self.assertEqual(21596786, max(max_results))
Exemplo n.º 3
0
 def test_day5_testinput(self):
     testcode_day5 = ic.parse_code(
         'C:/Users/Admin/Documents/Code/advent_of_code/2019/5/testinput.txt'
     )
     day5test = ic.Intcode(testcode_day5)
     self.assertEqual({0: 1002, 1: 4, 2: 3, 3: 4, 4: 33}, day5test.code)
     day5test.run()
     self.assertEqual({0: 1002, 1: 4, 2: 3, 3: 4, 4: 99}, day5test.code)
Exemplo n.º 4
0
 def test_day5_part1(self):
     code_day5 = ic.parse_code(
         'C:/Users/Admin/Documents/Code/advent_of_code/2019/5/input.txt')
     day5 = ic.Intcode(code_day5)
     while True:
         result = day5.run(input=1, reset=False)
         if result != 0:
             break
     self.assertEqual(result, 14155342)
Exemplo n.º 5
0
 def test_longer_example_day5_2(self):
     #999 if value below 8, 1000 if equal to 8, 1001 if larger than 8
     self.code = ic.parse(
         "3,21,1008,21,8,20,1005,20,22,107,8,21,20,1006,20,31,1106,0,36,98,0,0,1002,21,125,20,4,20,1105,1,46,104,"
         "999,1105,1,46,1101,1000,1,20,4,20,1105,1,46,98,99")
     self.prog = ic.Intcode(self.code)
     self.assertEqual(999, self.prog.run(7, debug=False))
     self.assertEqual(1000, self.prog.run(8, reset=True))
     self.assertEqual(1001, self.prog.run(9))
Exemplo n.º 6
0
 def test_day7_1_ex1(self):
     code = ic.parse('3,15,3,16,1002,16,10,16,1,16,15,15,4,15,99,0,0')
     seq = [4, 3, 2, 1, 0]
     amps = []
     inp2 = 0
     for i in range(5):
         inp1 = seq[i]
         amps.append(ic.Intcode(code))
         inp2 = amps[i].run([inp1, inp2], reset=False, debug=False)
     self.assertEqual(43210, inp2)
Exemplo n.º 7
0
 def test_day7_ex1(self):
     code = ic.parse(
         "109,1,204,-1,1001,100,1,100,1008,100,16,101,1006,101,0,99")
     expected = [
         109, 1, 204, -1, 1001, 100, 1, 100, 1008, 100, 16, 101, 1006, 101,
         0, 99
     ]
     prog = ic.Intcode(code)
     for _ in range(len(code)):
         result = prog.run(reset=False, debug=False, return_all=True)
     self.assertEqual(expected, result)
Exemplo n.º 8
0
 def test_day7_1_ex3(self):
     code = ic.parse(
         '3,31,3,32,1002,32,10,32,1001,31,-2,31,1007,31,0,33,1002,33,7,33,1,33,31,31,1,32,31,31,4,31,99,0,0,0'
     )
     seq = [1, 0, 4, 3, 2]
     amps = []
     inp2 = 0
     for i in range(5):
         inp1 = seq[i]
         amps.append(ic.Intcode(code))
         inp2 = amps[i].run([inp1, inp2], reset=False, debug=False)
     self.assertEqual(65210, inp2)
Exemplo n.º 9
0
 def test_day7_1_ex2(self):
     code = ic.parse(
         '3,23,3,24,1002,24,10,24,1002,23,-1,23,101,5,23,23,1,24,23,23,4,23,99,0,0'
     )
     seq = [0, 1, 2, 3, 4]
     amps = []
     inp2 = 0
     for i in range(5):
         inp1 = seq[i]
         amps.append(ic.Intcode(code))
         inp2 = amps[i].run([inp1, inp2], reset=False, debug=False)
     self.assertEqual(54321, inp2)
Exemplo n.º 10
0
def main():
    with open('input1.txt', 'r') as file:
        program = file.read().strip()

    comp = IntCode.IntCode(program)
    comp.push(1)
    comp.run()

    print(f"Part 1 solution is: {comp.output.pop()}")

    comp2 = IntCode.IntCode(program)
    comp2.push(5)
    comp2.run()
    print(f"Part 2 solution is: {comp2.pop()}")
Exemplo n.º 11
0
 def test_day7_part1(self):
     code = ic.parse_code(
         'C:/Users/Admin/Documents/Code/advent_of_code/2019/7/input.txt')
     seq = list(itertools.permutations(range(5), 5))
     results = []
     for s in seq:
         amps = []
         inp2 = 0
         for i in range(5):
             inp1 = s[i]
             amps.append(ic.Intcode(code))
             inp2 = amps[i].run([inp1, inp2], reset=False, debug=False)
         results.append(inp2)
     result = max(results)
     self.assertEqual(result, 366376)
Exemplo n.º 12
0
def part_one(code: list[int]) -> None:
    machine: IntCode.Machine = IntCode.Machine(code, [1])
    machine.run()
    if any(machine.output_vals[:-1]):
        print(f"Failed tests: {machine.output_vals}")
    else:
        print(machine.output_vals[-1])
Exemplo n.º 13
0
 def test_add_immediate(self):
     self.code = ic.parse("1,97,2,6,4,95,-1")
     self.prog = ic.Intcode(self.code)
     self.prog.par1.value = 97
     self.prog.par2.value = 2
     self.prog.par3.value = 6
     self.prog.par1.mode = 1
     self.prog.par2.mode = 1
     self.prog.par3.mode = 1
     self.prog.add(debug=False)
     self.assertEqual({
         0: 1,
         1: 97,
         2: 2,
         3: 6,
         4: 4,
         5: 95,
         6: 99
     }, self.prog.code)
Exemplo n.º 14
0
 def test_add_position(self):
     self.code = ic.parse("1,1,2,-1,4,95,-1")
     self.prog = ic.Intcode(self.code)
     self.prog.par1.value = 1
     self.prog.par2.value = 2
     self.prog.par3.value = 3
     self.prog.par1.mode = 0
     self.prog.par2.mode = 0
     self.prog.par3.mode = 0
     self.prog.add(debug=False)
     self.assertEqual({
         0: 1,
         1: 1,
         2: 2,
         3: 3,
         4: 4,
         5: 95,
         6: -1
     }, self.prog.code)
Exemplo n.º 15
0
 def test_relative_mode(self):
     prog = ic.Intcode([109, -1, 204, 1, 99])
     self.assertEqual(109, prog.run())
     prog = ic.Intcode([109, 1, 9, 2, 204, -6, 99])
     self.assertEqual(204, prog.run())
     prog = ic.Intcode([109, 1, 109, 9, 204, -6, 99])
     self.assertEqual(204, prog.run())
     prog = ic.Intcode([109, 1, 209, -1, 204, -106, 99])
     self.assertEqual(204, prog.run())
     prog = ic.Intcode([109, 1, 3, 3, 204, 2, 99])
     self.assertEqual(66, prog.run(66))
     prog = ic.Intcode([109, 1, 203, 2, 204, 2, 99])
     self.assertEqual(66, prog.run(66))
Exemplo n.º 16
0
def arcade(code, play_free=False):
    codes = [int(x) for x in code.split(',')]
    computer = IntCode(codes)

    tiles = dict()
    outputs = []
    score = 0

    if play_free:
        computer.edit(0, 2)

    while True:
        res = computer.run()

        if res == R_HALT:
            break
        elif res == R_OUTPUT:
            outputs.append(computer.read())

            if len(outputs) == 3:
                x = outputs[0]
                y = outputs[1]
                tile_id = outputs[2]

                if x == -1 and y == 0:
                    score = tile_id
                else:
                    tiles[(x, y)] = tile_id

                if tile_id == 3:
                    paddle = x
                elif tile_id == 4:
                    ball = x

                outputs = []
        elif res == R_INPUT:
            computer.write(cmp(ball, paddle))

    return tiles, score
Exemplo n.º 17
0
def run(code: list[int], x: int) -> int:
    machine: IntCode.Machine = IntCode.Machine(code, [x])
    machine.run()
    [ans] = machine.output_vals
    return ans
Exemplo n.º 18
0
def run_with_noun_verb(code: list[int], noun: int, verb: int) -> int:
    machine: IntCode.Machine = IntCode.Machine(code)
    machine.code[1] = noun
    machine.code[2] = verb
    machine.run()
    return machine.code[0]
Exemplo n.º 19
0
import sys
sys.path.append("C:/Users/Admin/Documents/Code/advent_of_code/2019/5")
import IntCode as ic

code = ic.parse_code(
    'C:/Users/Admin/Documents/Code/advent_of_code/2019/9/input.txt')
prog = ic.Intcode(code)
print(prog.run(reset=False, debug=True, input=1))
Exemplo n.º 20
0
import sys
sys.path.append("C:/Users/Admin/Documents/Code/advent_of_code/2019/5")
import IntCode as ic

code_day5 = ic.parse_code('C:/Users/Admin/Documents/Code/advent_of_code/2019/5/input.txt')
day5 = ic.Intcode(code_day5)
result = 0
while result == 0:
    result = day5.run(input=1, reset=False)
print(result)
assert result == 14155342
Exemplo n.º 21
0
 def test_equals_8_immediate_mode(self):
     self.code = ic.parse("3,3,1108,-1,8,3,4,3,99")
     self.prog = ic.Intcode(self.code)
     self.assertEqual(self.prog.run(8, reset=True), 1)
     self.assertEqual(self.prog.run(7), 0)
Exemplo n.º 22
0
import sys
sys.path.append("C:/Users/Admin/Documents/Code/advent_of_code/2019/5")
import IntCode as ic

# EXAMPLES

code = ic.parse(
    '3,26,1001,26,-4,26,3,27,1002,27,2,27,1,27,26,27,4,27,1001,28,-1,28,1005,28,6,99,0,0,5'
)
seq = [9, 8, 7, 6, 5]

code = ic.parse(
    '3,52,1001,52,-5,52,3,53,1,52,56,54,1007,54,5,55,1005,55,26,1001,54,-5,54,1105,1,12,1,53,54,53,1008,54,'
    '0,55,1001,55,1,55,2,53,55,53,4,53,1001,56,-1,56,1005,56,6,99,0,0,0,0,10')
seq = [9, 7, 8, 5, 6]

results = []
amps = []
inp2 = 0

for i in range(5):
    #print("*** Amp", i)
    inp1 = seq[i]
    amps.append(ic.Intcode(code))
    #print("*** called with input", inp1, inp2)
    inp2 = amps[i].run([inp1, inp2], reset=False)
    #print("Amp", i, "'s code:", amps[i].code)

while True:
    i += 1
    i = i % len(seq)
Exemplo n.º 23
0
 def test_jump_zero_if_input_zero_immediate(self):
     self.code = ic.parse("3,3,1105,-1,9,1101,0,0,12,4,12,99,1")
     self.prog = ic.Intcode(self.code)
     self.assertEqual(self.prog.run(0, reset=True), 0)
     self.assertEqual(self.prog.run(2323), 1)
Exemplo n.º 24
0
 def test_jump_zero_if_input_zero(self):
     self.code = ic.parse("3,12,6,12,15,1,13,14,13,4,13,99,-1,0,1,9")
     self.prog = ic.Intcode(self.code)
     self.assertEqual(self.prog.run(0, debug=False, reset=True), 0)
     self.assertEqual(self.prog.run(3, debug=False), 1)
Exemplo n.º 25
0
 def test_less_than_8_immediate_mode(self):
     self.code = ic.parse("3,3,1107,-1,8,3,4,3,99")
     self.prog = ic.Intcode(self.code)
     self.assertEqual(self.prog.run(8, debug=False, reset=True), 0)
     self.assertEqual(self.prog.run(7), 1)
Exemplo n.º 26
0
def maximize_thrust(program: IntCode,
                    phases: list,
                    feedback_loop: bool = False) -> int:
    """
    Return maximal possible thrust.
    """
    list_phases = list(permutations(phases))
    list_thrust = [
        amplify_thrust(program, phase, feedback_loop) for phase in list_phases
    ]
    return max(list_thrust)


if __name__ == '__main__':
    # 1
    program_test_1 = IntCode(
        [3, 15, 3, 16, 1002, 16, 10, 16, 1, 16, 15, 15, 4, 15, 99, 0, 0])
    assert maximize_thrust(program_test_1, list(range(5))) == 43210

    program_test_2 = IntCode([
        3, 23, 3, 24, 1002, 24, 10, 24, 1002, 23, -1, 23, 101, 5, 23, 23, 1,
        24, 23, 23, 4, 23, 99, 0, 0
    ])
    assert maximize_thrust(program_test_2, list(range(5))) == 54321

    program_test_3 = IntCode([
        3, 31, 3, 32, 1002, 32, 10, 32, 1001, 31, -2, 31, 1007, 31, 0, 33,
        1002, 33, 7, 33, 1, 33, 31, 31, 1, 32, 31, 31, 4, 31, 99, 0, 0, 0
    ])
    assert maximize_thrust(program_test_3, list(range(5))) == 65210

    program = IntCode("input.csv")
Exemplo n.º 27
0
        self.move(dif_dir[tuple(dif)])
        # remove the last element from the route.
        self.route.pop()
        self.map[tuple(self.position)] = "D"
        self.uturn = True
        # if the previous move was not a u-turn but this one is, return a -1 code to let the system know
        # we're at a dead end.
        if not self.previous_uturn:
            print("recorded a dead end", dead_end_dist,
                  "steps from oxygen system at", dead_end_pos)
            #display_grid(droid.map)
            self.distances.append(dead_end_dist)
            return -1


code = ic.parse_code(
    'C:/Users/Admin/SURFdrive/Code/advent_of_code/2019/15/input.txt')
software = ic.Intcode(code)

droid = RepairDroid(software)
output = None

while not output == 99:
    output = droid.scan_and_move()
    droid.map[(0, 0)] = "S"

display_grid(droid.map)
print(droid.oxygen_pos)

map = droid.map

# start a new droid
Exemplo n.º 28
0
def part_two(code: list[int]) -> None:
    machine: IntCode.Machine = IntCode.Machine(code, [5])
    machine.run()
    print(machine.output_vals[-1])
Exemplo n.º 29
0
        return self.panels.get((self.y, self.x), 0)

    def set_color(self, c):
        self.panels[(self.y, self.x)] = c

    def run(self):
        for (c, t) in pairs(self.code):
            self.set_color(c)
            self.turn(t)
            self.move()
            self.inp.append(self.get_color())


# Answer part 1
inp = [0]
robot = Robot(IntCode.fromfile('input.txt', iter(inp)), inp)
robot.run()
print len(robot.panels)

# Answer part 2
inp = [1]
robot = Robot(IntCode.fromfile('input.txt', iter(inp)), inp, {(0, 0): 1})
robot.run()

xmin = min(x for (y, x) in robot.panels.keys())
xmax = max(x for (y, x) in robot.panels.keys())
ymin = min(y for (y, x) in robot.panels.keys())
ymax = max(y for (y, x) in robot.panels.keys())
image = np.zeros(((ymax - ymin + 1), (xmax - xmin + 1)), dtype=int)
for ((y, x), c) in robot.panels.iteritems():
    image[y, x] = c
Exemplo n.º 30
0
 def test_less_than_8(self):
     self.code = ic.parse("3,9,7,9,10,9,4,9,99,-1,8")
     self.prog = ic.Intcode(self.code)
     self.assertEqual(self.prog.run(8, reset=True), 0)
     self.assertEqual(self.prog.run(7), 1)