From 95320ae0b4fcac560f558cb6ba2ada5b4388608e Mon Sep 17 00:00:00 2001 From: starnakin Date: Sun, 3 Dec 2023 09:45:12 +0100 Subject: [PATCH] opti: day03 : part 1 --- 2023/day03/src/part1.py | 44 ++++++++++++++--------------------------- 1 file changed, 15 insertions(+), 29 deletions(-) diff --git a/2023/day03/src/part1.py b/2023/day03/src/part1.py index 3e38559..ce30b16 100644 --- a/2023/day03/src/part1.py +++ b/2023/day03/src/part1.py @@ -2,42 +2,28 @@ text: str = open("input.txt", "r").read() value: int = 0; -def get_symbol_around(list:[str], pos: tuple, length: int): - start = [0,0] - end = [0,0] - - start[0] = pos[0] - start[1] = pos[1] - start[0] -= (start[0] != 0) - start[1] -= (start[1] != 0) - end[0] = pos[0] - end[1] = pos[1] - end[0] += length - end[0] += end[0] < len(list[pos[1]]) - end[1] += end[1] < len(list) - bozo = list[start[1]:end[1] + 1] - for y in bozo: - bozo2 = y[start[0]:end[0]] - print(bozo2) - for x in bozo2: - if (not x.isdigit() and not x == "."): - print() +def is_partnumber(lst:[str], x, y, length: int): + start_x = x - (x > 0) + start_y = y - (y > 0) + stop_x = x + length + (x < len(lst[y]) - 1) + stop_y = y + (y < len(lst) - 1) + for y, line in enumerate(lst[start_y:stop_y + 1]): + line = line[start_x:stop_x] + for x, char in enumerate(line): + if (not char.isdigit() and not char == "."): return 1 - print() return 0 lst = text.split("\n") -end: int = 0 +length: int = 0 for y in range(len(lst)): lst[y] += "." for x in range(len(lst[y])): if (lst[y][x].isdigit()): - end += 1; - elif (end != 0): - if (get_symbol_around(lst, (x - end, y), end)): - value += int(lst[y][x - end:x]) - else: - print(f"./input.txt:{y + 1}:{x}") - end = 0; + length += 1 + elif (length != 0): + if (is_partnumber(lst, x - length, y, length)): + value += int(lst[y][x - length:x]) + length = 0 print(value) \ No newline at end of file