diff --git a/day-02/input/ludoge.txt b/day-02/input/ludoge.txt new file mode 100644 index 0000000..d96672d --- /dev/null +++ b/day-02/input/ludoge.txt @@ -0,0 +1 @@ +1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,1,10,19,1,19,5,23,2,23,9,27,1,5,27,31,1,9,31,35,1,35,10,39,2,13,39,43,1,43,9,47,1,47,9,51,1,6,51,55,1,13,55,59,1,59,13,63,1,13,63,67,1,6,67,71,1,71,13,75,2,10,75,79,1,13,79,83,1,83,10,87,2,9,87,91,1,6,91,95,1,9,95,99,2,99,10,103,1,103,5,107,2,6,107,111,1,111,6,115,1,9,115,119,1,9,119,123,2,10,123,127,1,127,5,131,2,6,131,135,1,135,5,139,1,9,139,143,2,143,13,147,1,9,147,151,1,151,2,155,1,9,155,0,99,2,0,14,0 \ No newline at end of file diff --git a/day-02/part-1/ludoge.py b/day-02/part-1/ludoge.py new file mode 100644 index 0000000..d45cf40 --- /dev/null +++ b/day-02/part-1/ludoge.py @@ -0,0 +1,20 @@ +from tool.runners.python import SubmissionPy + + +class LudogeSubmission(SubmissionPy): + def run(self, s): + data = list(map(int, s.split(","))) + data[1] = 12 + data[2] = 2 + i = 0 + while data[i] != 99: + opcode, operand_1, operand_2, destination = data[i : i + 4] + if opcode == 1: + result = data[operand_1] + data[operand_2] + elif opcode == 2: + result = data[operand_1] * data[operand_2] + else: + raise Exception(f"Not a valid opcode: {opcode}") + data[destination] = result + i += 4 + return data[0] diff --git a/day-02/part-2/ludoge.py b/day-02/part-2/ludoge.py new file mode 100644 index 0000000..9b367f3 --- /dev/null +++ b/day-02/part-2/ludoge.py @@ -0,0 +1,24 @@ +from tool.runners.python import SubmissionPy + + +class LudogeSubmission(SubmissionPy): + def run(self, s): + base_data = list(map(int, s.split(","))) + for noun in range(100): + for verb in range(100): + data = base_data[::] + data[1] = noun + data[2] = verb + i = 0 + while data[i] != 99: + opcode, operand_1, operand_2, destination = data[i : i + 4] + if opcode == 1: + result = data[operand_1] + data[operand_2] + elif opcode == 2: + result = data[operand_1] * data[operand_2] + else: + raise Exception(f"Not a valid opcode: {opcode}") + data[destination] = result + i += 4 + if data[0] == 19690720: + return 100 * noun + verb diff --git a/day-05/input/ludoge.txt b/day-05/input/ludoge.txt new file mode 100644 index 0000000..be09809 --- /dev/null +++ b/day-05/input/ludoge.txt @@ -0,0 +1 @@ +3,225,1,225,6,6,1100,1,238,225,104,0,1101,81,30,225,1102,9,63,225,1001,92,45,224,101,-83,224,224,4,224,102,8,223,223,101,2,224,224,1,224,223,223,1102,41,38,225,1002,165,73,224,101,-2920,224,224,4,224,102,8,223,223,101,4,224,224,1,223,224,223,1101,18,14,224,1001,224,-32,224,4,224,1002,223,8,223,101,3,224,224,1,224,223,223,1101,67,38,225,1102,54,62,224,1001,224,-3348,224,4,224,1002,223,8,223,1001,224,1,224,1,224,223,223,1,161,169,224,101,-62,224,224,4,224,1002,223,8,223,101,1,224,224,1,223,224,223,2,14,18,224,1001,224,-1890,224,4,224,1002,223,8,223,101,3,224,224,1,223,224,223,1101,20,25,225,1102,40,11,225,1102,42,58,225,101,76,217,224,101,-153,224,224,4,224,102,8,223,223,1001,224,5,224,1,224,223,223,102,11,43,224,1001,224,-451,224,4,224,1002,223,8,223,101,6,224,224,1,223,224,223,1102,77,23,225,4,223,99,0,0,0,677,0,0,0,0,0,0,0,0,0,0,0,1105,0,99999,1105,227,247,1105,1,99999,1005,227,99999,1005,0,256,1105,1,99999,1106,227,99999,1106,0,265,1105,1,99999,1006,0,99999,1006,227,274,1105,1,99999,1105,1,280,1105,1,99999,1,225,225,225,1101,294,0,0,105,1,0,1105,1,99999,1106,0,300,1105,1,99999,1,225,225,225,1101,314,0,0,106,0,0,1105,1,99999,8,226,677,224,1002,223,2,223,1006,224,329,1001,223,1,223,7,226,226,224,102,2,223,223,1006,224,344,101,1,223,223,108,677,677,224,1002,223,2,223,1006,224,359,101,1,223,223,1107,226,677,224,1002,223,2,223,1005,224,374,101,1,223,223,1008,677,226,224,1002,223,2,223,1005,224,389,101,1,223,223,1007,677,226,224,1002,223,2,223,1005,224,404,1001,223,1,223,1107,677,226,224,1002,223,2,223,1005,224,419,1001,223,1,223,108,677,226,224,102,2,223,223,1006,224,434,1001,223,1,223,7,226,677,224,102,2,223,223,1005,224,449,1001,223,1,223,107,226,226,224,102,2,223,223,1006,224,464,101,1,223,223,107,677,226,224,102,2,223,223,1006,224,479,101,1,223,223,1007,677,677,224,1002,223,2,223,1006,224,494,1001,223,1,223,1008,226,226,224,1002,223,2,223,1006,224,509,101,1,223,223,7,677,226,224,1002,223,2,223,1006,224,524,1001,223,1,223,1007,226,226,224,102,2,223,223,1006,224,539,101,1,223,223,8,677,226,224,1002,223,2,223,1006,224,554,101,1,223,223,1008,677,677,224,102,2,223,223,1006,224,569,101,1,223,223,1108,677,226,224,102,2,223,223,1005,224,584,101,1,223,223,107,677,677,224,102,2,223,223,1006,224,599,1001,223,1,223,1108,677,677,224,1002,223,2,223,1006,224,614,1001,223,1,223,1107,677,677,224,1002,223,2,223,1005,224,629,1001,223,1,223,108,226,226,224,1002,223,2,223,1005,224,644,101,1,223,223,8,226,226,224,1002,223,2,223,1005,224,659,101,1,223,223,1108,226,677,224,1002,223,2,223,1006,224,674,101,1,223,223,4,223,99,226 \ No newline at end of file diff --git a/day-05/part-1/ludoge.py b/day-05/part-1/ludoge.py new file mode 100644 index 0000000..35fa9d9 --- /dev/null +++ b/day-05/part-1/ludoge.py @@ -0,0 +1,34 @@ +from tool.runners.python import SubmissionPy + + +class LudogeSubmission(SubmissionPy): + def run(self, s): + base_data = list(map(int, s.split(","))) + data = base_data[::] + i = 0 + + def get_param(offset): + mode = (data[i] // 10 ** (1 + offset)) % 10 + return data[data[i + offset]] if mode == 0 else data[i + offset] + + input_value = 1 + outputs = [] + while True: + opcode = data[i] % 100 + if opcode == 1: + data[data[i + 3]] = get_param(1) + get_param(2) + i += 4 + elif opcode == 2: + data[data[i + 3]] = get_param(1) * get_param(2) + i += 4 + elif opcode == 3: + data[data[i + 1]] = input_value + i += 2 + elif opcode == 4: + outputs.append(get_param(1)) + i += 2 + elif opcode == 99: + break + else: + raise Exception(f"Not a valid opcode: {opcode}") + return outputs[-1] diff --git a/day-05/part-2/ludoge.py b/day-05/part-2/ludoge.py new file mode 100644 index 0000000..cf140d2 --- /dev/null +++ b/day-05/part-2/ludoge.py @@ -0,0 +1,50 @@ +from tool.runners.python import SubmissionPy + + +class LudogeSubmission(SubmissionPy): + def run(self, s): + base_data = list(map(int, s.split(","))) + data = base_data[::] + i = 0 + + def get_param(offset): + mode = (data[i] // 10 ** (1 + offset)) % 10 + return data[data[i + offset]] if mode == 0 else data[i + offset] + + input_value = 5 + outputs = [] + while True: + opcode = data[i] % 100 + if opcode == 1: + data[data[i + 3]] = get_param(1) + get_param(2) + i += 4 + elif opcode == 2: + data[data[i + 3]] = get_param(1) * get_param(2) + i += 4 + elif opcode == 3: + data[data[i + 1]] = input_value + i += 2 + elif opcode == 4: + outputs.append(get_param(1)) + i += 2 + elif opcode == 5: + if get_param(1) != 0: + i = get_param(2) + else: + i += 3 + elif opcode == 6: + if get_param(1) == 0: + i = get_param(2) + else: + i += 3 + elif opcode == 7: + data[data[i + 3]] = 1 if get_param(1) < get_param(2) else 0 + i += 4 + elif opcode == 8: + data[data[i + 3]] = 1 if get_param(1) == get_param(2) else 0 + i += 4 + elif opcode == 99: + break + else: + raise Exception(f"Not a valid opcode: {opcode}") + return outputs[-1]