day 3
This commit is contained in:
54
2025/03/solution.py
Executable file
54
2025/03/solution.py
Executable file
@@ -0,0 +1,54 @@
|
||||
#!/usr/bin/env python3
|
||||
import sys
|
||||
import pathlib
|
||||
def read_input():
|
||||
path = pathlib.Path(sys.argv[1]) if len(sys.argv) > 1 else pathlib.Path("input.txt")
|
||||
return path.read_text().rstrip("\n")
|
||||
|
||||
def parse(data):
|
||||
return data.splitlines()
|
||||
|
||||
def part1(data):
|
||||
sum = 0
|
||||
|
||||
for bank in data:
|
||||
bat = list(bank)
|
||||
large = sorted(bat[:-1])[-1]
|
||||
large_loc = bat.index(large)
|
||||
|
||||
second = 0
|
||||
for val in bat[large_loc+1:]:
|
||||
if int(val) >= int(second):
|
||||
second = val
|
||||
|
||||
sum += int( str(abs(int(large))) + str(abs(int(second))) )
|
||||
|
||||
return sum
|
||||
|
||||
|
||||
def part2(data):
|
||||
s = 0
|
||||
for bank in data:
|
||||
digits = [int(x) for x in bank]
|
||||
need = 12
|
||||
remove = len(digits) - need
|
||||
stack = []
|
||||
for d in digits:
|
||||
while stack and remove > 0 and stack[-1] < d:
|
||||
stack.pop()
|
||||
remove -= 1
|
||||
stack.append(d)
|
||||
res = stack[:need]
|
||||
s += int(''.join(str(x) for x in res))
|
||||
return s
|
||||
|
||||
def main():
|
||||
raw = read_input()
|
||||
data = parse(raw)
|
||||
r1 = part1(data)
|
||||
r2 = part2(data)
|
||||
print(r1)
|
||||
print(r2)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user