commit 58d00152015551fc9e0907b38e0e93c377bfc9ce Author: tebarius Date: Fri Dec 13 14:11:23 2024 +0100 01 diff --git a/01/01.py b/01/01.py new file mode 100644 index 0000000..ea8ffa2 --- /dev/null +++ b/01/01.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +file = "./input.txt" +ex1 = ["R2", "L3"] +ex2 = ["R2", "R2", "R2"] +ex3 = ["R5", "L5", "R5", "R3"] +ex4 = ["R8", "R4", "R4", "R8"] + +from time import time +start_time = time() + +def read_file(f:str) -> list: + out = [] + input_file = open(f, "r") + for line in input_file: + line = line.strip() + if line == "": + continue + else: + line = line.replace(" ","").split(',') + out.extend(line) + input_file.close() + return out + +def check_position(pos:tuple[int, int]): + if pos in pos_list: + print(f'Solution P2: {abs(pos[0]) + abs(pos[1])}') + global part2 + part2 = False + else: + pos_list.append(pos) + + +def go(pos:tuple[int, int, str], steps:str) -> tuple[int, int, str]: + global part2 + we, ns, direction = pos + step = int(steps[1:]) + if direction == "N": + if steps[0] == "R": + direction = "E" + for _ in range(step): + we += 1 + if part2: + check_position((we,ns)) + elif steps[0] == "L": + direction = "W" + for _ in range(step): + we -= 1 + if part2: + check_position((we,ns)) + elif direction == "S": + if steps[0] == "R": + direction = "W" + for _ in range(step): + we -= 1 + if part2: + check_position((we,ns)) + elif steps[0] == "L": + direction = "E" + for _ in range(step): + we += 1 + if part2: + check_position((we,ns)) + elif direction == "W": + if steps[0] == "R": + direction = "N" + for _ in range(step): + ns += 1 + if part2: + check_position((we,ns)) + elif steps[0] == "L": + direction = "S" + for _ in range(step): + ns -= 1 + if part2: + check_position((we,ns)) + elif direction == "E": + if steps[0] == "R": + direction = "S" + for _ in range(step): + ns -= 1 + if part2: + check_position((we,ns)) + elif steps[0] == "L": + direction = "N" + for _ in range(step): + ns += 1 + if part2: + check_position((we,ns)) + return we, ns, direction + +if __name__ == "__main__": + position = (0,0,"N") + pos_list = [(0,0)] + part2 = True + input_list = read_file(file) + #input_list = ex1 + #input_list = ex2 + #input_list = ex3 + # input_list = ex4 + for elem in input_list: + position = go(position, elem) + + solution = abs(position[0]) + abs(position[1]) + + # print(input_list) + print(f'Solution P1: {solution}') + print(f'Runtime: {time()-start_time:.2f} s') \ No newline at end of file diff --git a/01/input.txt b/01/input.txt new file mode 100644 index 0000000..28ee4bb --- /dev/null +++ b/01/input.txt @@ -0,0 +1 @@ +L4, L3, R1, L4, R2, R2, L1, L2, R1, R1, L3, R5, L2, R5, L4, L3, R2, R2, L5, L1, R4, L1, R3, L3, R5, R2, L5, R2, R1, R1, L5, R1, L3, L2, L5, R4, R4, L2, L1, L1, R1, R1, L185, R4, L1, L1, R5, R1, L1, L3, L2, L1, R2, R2, R2, L1, L1, R4, R5, R53, L1, R1, R78, R3, R4, L1, R5, L1, L4, R3, R3, L3, L3, R191, R4, R1, L4, L1, R3, L1, L2, R3, R2, R4, R5, R5, L3, L5, R2, R3, L1, L1, L3, R1, R4, R1, R3, R4, R4, R4, R5, R2, L5, R1, R2, R5, L3, L4, R1, L5, R1, L4, L3, R5, R5, L3, L4, L4, R2, R2, L5, R3, R1, R2, R5, L5, L3, R4, L5, R5, L3, R1, L1, R4, R4, L3, R2, R5, R1, R2, L1, R4, R1, L3, L3, L5, R2, R5, L1, L4, R3, R3, L3, R2, L5, R1, R3, L3, R2, L1, R4, R3, L4, R5, L2, L2, R5, R1, R2, L4, L4, L5, R3, L4