59 lines
1.2 KiB
Python
59 lines
1.2 KiB
Python
def part1(input_str):
|
|
lines = input_str.strip().split("\n")
|
|
output = 0
|
|
|
|
for bank in lines:
|
|
best = 0
|
|
length = len(bank)
|
|
|
|
for i in range(length):
|
|
tens = int(bank[i])
|
|
for j in range(i + 1, length):
|
|
ones = int(bank[j])
|
|
value = tens * 10 + ones
|
|
if value > best:
|
|
best = value
|
|
|
|
output += best
|
|
|
|
return output
|
|
|
|
|
|
def part2(input_str, k = 12):
|
|
lines = input_str.strip().split("\n")
|
|
total = 0
|
|
|
|
for bank in lines:
|
|
bank = bank.strip()
|
|
n = len(bank)
|
|
start = 0
|
|
chosen = []
|
|
|
|
for picked in range(k):
|
|
last = n - (k - picked)
|
|
best_char = bank[start]
|
|
best_idx = start
|
|
|
|
for i in range(start + 1, last + 1):
|
|
if bank[i] > best_char:
|
|
best_char = bank[i]
|
|
best_idx = i
|
|
|
|
if best_char == '9':
|
|
break
|
|
|
|
chosen.append(best_char)
|
|
start = best_idx + 1
|
|
|
|
total += int("".join(chosen))
|
|
|
|
return total
|
|
|
|
|
|
|
|
with open("input.txt") as f:
|
|
data = f.read()
|
|
|
|
print("Part1:", part1(data))
|
|
print("Part2:", part2(data, 12))
|