Compare commits

..

No commits in common. "4dcc750416e3725ef000cda835e671c17036675a" and "016a92f3cde738d96759db35befd518fe884d9ce" have entirely different histories.

3 changed files with 20 additions and 60 deletions

2
.gitignore vendored
View file

@ -1,2 +0,0 @@
*.in
*.ex*

View file

@ -1,35 +0,0 @@
import fileinput
from functools import reduce
def main():
part1 = 0
part2 = 0
for i, line in enumerate(fileinput.input()):
line = line.strip()
subsets = line.split(": ")[1].split("; ")
maxes = {}
part1_possible = True
for subset in subsets:
for balls in subset.split(", "):
count, color = balls.split()
count = int(count)
maxes[color] = max(maxes.get(color, 0), count)
part1_possible = (
part1_possible
and (color != "red" or count <= 12)
and (color != "green" or count <= 13)
and (color != "blue" or count <= 14)
)
if part1_possible:
part1 += i + 1
power = reduce(lambda x, y: x * y, maxes.values())
part2 += power
print(part1, part2)
main()

View file

@ -1,27 +1,24 @@
import fileinput import fileinput
def main(): #
# # Part 1
# Part 1 #
# cards = []
cards = [] part1 = 0
part1 = 0 for i, line in enumerate(fileinput.input()):
for line in fileinput.input(): card = line.rstrip().split(": ")[1]
card = line.split(": ", 1)[1] (winning, owned) = ({int(i) for i in h.split()} for h in card.split(" | "))
(winning, owned) = ({int(i) for i in h.split()} for h in card.split(" | ", 1)) count = len(winning & owned)
count = len(winning & owned) cards.append(count)
cards.append(count) part1 += 1 << count - 1 if count else 0
part1 += 1 << count - 1 if count else 0
# #
# Part 2 # Part 2
# #
dp = [0] * len(cards) dp = [0] * len(cards)
part2 = 0 part2 = 0
for i in range(len(cards)): for i in range(len(cards)):
dp[i] = 1 + sum(dp[i - cards[-i - 1] : i]) dp[i] = 1 + sum(dp[i - cards[-i - 1] : i])
part2 += dp[i] part2 += dp[i]
print(part1, part2) print(part1, part2)
main()