From 24445bee8bea73112ac4cfb67b3d12820f359145 Mon Sep 17 00:00:00 2001 From: Daniel Bulant Date: Sun, 3 Dec 2023 13:20:20 +0100 Subject: [PATCH] code cleanup --- 2023/3/part1.py | 23 ++++++----------------- 2023/3/part2.py | 29 ++++++++++++----------------- 2 files changed, 18 insertions(+), 34 deletions(-) diff --git a/2023/3/part1.py b/2023/3/part1.py index 1884803..8253915 100644 --- a/2023/3/part1.py +++ b/2023/3/part1.py @@ -6,21 +6,10 @@ partnumbers = [] lineNumber = 0 for line in open("./input2"): lineNumber += 1 - # Find all numbers and their positions - foundNumbers = [(m.group(), m.start(), m.end()) for m in re.finditer(r'\d+', line)] - partnumbers += [(lineNumber, number[0], number[1], number[2]) for number in foundNumbers] - # Find all symbols and their positions - foundSymbols = [(m.group(), m.start(), m.end()) for m in re.finditer(r'[^\d.\n]', line)] - symbols += [(lineNumber, symbol[0], symbol[1], symbol[2]) for symbol in foundSymbols] + partnumbers += [(lineNumber, m.group(), m.start(), m.end()) for m in re.finditer(r'\d+', line)] + symbols += [(lineNumber, m.group(), m.start(), m.end()) for m in re.finditer(r'[^\d.\n]', line)] -print(symbols) - -matchingNumbers = [] - -for partnumber in partnumbers: - foundSymbols = [symbol for symbol in symbols if abs(symbol[0] - partnumber[0]) <= 1 and partnumber[2] - 1 <= symbol[2] <= partnumber[3]] - if len(foundSymbols) > 0: - print(partnumber[1]) - matchingNumbers.append(partnumber[1]) - -print(sum([int(number) for number in matchingNumbers])) \ No newline at end of file +print(sum([ + int(partnumber[1]) for partnumber in partnumbers + if len([symbol for symbol in symbols if abs(symbol[0] - partnumber[0]) <= 1 and partnumber[2] - 1 <= symbol[2] <= partnumber[3]]) > 0 +])) \ No newline at end of file diff --git a/2023/3/part2.py b/2023/3/part2.py index 3ff566b..94e42c5 100644 --- a/2023/3/part2.py +++ b/2023/3/part2.py @@ -7,21 +7,16 @@ partnumbers = [] lineNumber = 0 for line in open("./input2"): lineNumber += 1 - # Find all numbers and their positions - foundNumbers = [(m.group(), m.start(), m.end()) for m in re.finditer(r'\d+', line)] - partnumbers += [(lineNumber, number[0], number[1], number[2]) for number in foundNumbers] - # Find all symbols and their positions - foundSymbols = [(m.group(), m.start(), m.end()) for m in re.finditer(r'[^\d.\n]', line)] - symbols += [(lineNumber, symbol[0], symbol[1], symbol[2]) for symbol in foundSymbols] + partnumbers += [(lineNumber, m.group(), m.start(), m.end()) for m in re.finditer(r'\d+', line)] + symbols += [(lineNumber, m.group(), m.start(), m.end()) for m in re.finditer(r'[^\d.\n]', line)] -print(symbols) -foundGears = [] - -for symbol in symbols: - if symbol[1] != '*': continue - foundNumbers = [partnumber for partnumber in partnumbers if abs(symbol[0] - partnumber[0]) <= 1 and partnumber[2] - 1 <= symbol[2] <= partnumber[3]] - if len(foundNumbers) != 2: continue - gearRation = math.prod([int(number[1]) for number in foundNumbers]) - foundGears.append(gearRation) - -print(sum(foundGears)) \ No newline at end of file +print(sum( + [ + math.prod([int(number[1]) for number in foundNumbers]) + for symbol, foundNumbers in [ + (symbol, [partnumber for partnumber in partnumbers if abs(symbol[0] - partnumber[0]) <= 1 and partnumber[2] - 1 <= symbol[2] <= partnumber[3]]) + for symbol in symbols if symbol[1] == '*' + ] + if len(foundNumbers) == 2 + ] +))