Example #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)
Example #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))
Example #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)
Example #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)
Example #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))
Example #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)
Example #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)
Example #8
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)
Example #9
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)
Example #10
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)
Example #11
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))
Example #12
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)
Example #13
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)
Example #14
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))
Example #15
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
Example #16
0
 def test_day7_ex2(self):
     code = ic.parse("1102,34915192,34915192,7,4,7,99,0")
     prog = ic.Intcode(code)
     self.assertEqual(1219070632396864, prog.run(reset=False))
Example #17
0
 def test_day7_ex3(self):
     code = ic.parse("104,1125899906842624,99")
     prog = ic.Intcode(code)
     self.assertEqual(1125899906842624, prog.run(reset=False))
Example #18
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)
Example #19
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)
Example #20
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)
Example #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)
Example #22
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)
Example #23
0
        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
droid2 = RepairDroid(software)
Example #24
0
 def test_day2_part1(self):
     code_day2 = ic.parse_code(
         'C:/Users/Admin/Documents/Code/advent_of_code/2019/2/input.txt')
     day2 = ic.Intcode(code_day2)
     day2.run(value1=12, value2=2, reset=False)
     self.assertEqual(day2.code[0], 3101878)
Example #25
0
 def test_day2_part2(self):
     code_day2 = ic.parse_code(
         'C:/Users/Admin/Documents/Code/advent_of_code/2019/2/input.txt')
     day2 = ic.Intcode(code_day2)
     day2.run(value1=84, value2=44)
     self.assertEqual(19690720, day2.code[0])
Example #26
0
 def test_day5_part2(self):
     code_day5 = ic.parse_code(
         'C:/Users/Admin/Documents/Code/advent_of_code/2019/5/input.txt')
     day5 = ic.Intcode(code_day5)
     result = day5.run(input=5)
     self.assertEqual(8684145, result)
Example #27
0
)
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)
    #print("*** Amp", i)
    inp1 = seq[i]
    #print("*** called with input", inp2)
    inp2 = amps[i].run([inp2], reset=False)
    #print("pointer position:", amps[i].pointer)
    #print("Amp", i, "'s code:", amps[i].code)
    if i == 4:
        #print("Amp E's output:",  inp2)
Example #28
0
import sys
sys.path.append("C:/Users/Admin/Documents/Code/advent_of_code/2019/5")
import IntCode as ic

code_day2 = ic.parse_code(
    'C:/Users/Admin/Documents/Code/advent_of_code/2019/2/input.txt')
day2 = ic.Intcode(code_day2)
self.assertEqual(3101878, day2.run(value1=12, value2=2))