Skip to content

Commit 173fa78

Browse files
committed
Solve Everybody.Codes Story 3 Quest 1 (rough)
1 parent d738fcf commit 173fa78

1 file changed

Lines changed: 85 additions & 0 deletions

File tree

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
"""Everyone Codes Day N."""
2+
3+
import collections
4+
import logging
5+
from lib import helpers
6+
from lib import parsers
7+
8+
log = logging.info
9+
TR = str.maketrans({c: "0" for c in "srgb"} | {c: "1" for c in "SRGB"})
10+
11+
12+
def to_val(color):
13+
return int(color.translate(TR), 2)
14+
15+
def solve(part: int, data: str) -> int:
16+
"""Solve the parts."""
17+
out = 0
18+
numbers = []
19+
for line in data.splitlines():
20+
if ":" not in line:
21+
print(line)
22+
lid, rest = line.split(":")
23+
colors = [to_val(i) for i in rest.split()]
24+
numbers.append([int(lid)] + colors)
25+
if part == 1:
26+
return sum(
27+
lid
28+
for lid, *colors in numbers
29+
if colors[1] > colors[0] and colors[1] > colors[2]
30+
)
31+
if part == 2:
32+
want_shine = max(n[4] for n in numbers)
33+
color = min(sum(n[1:4]) for n in numbers if n[4] == want_shine)
34+
return sum(n[0] for n in numbers if sum(n[1:4]) == color and n[4] == want_shine)
35+
36+
groups = collections.defaultdict(set)
37+
for lid, *colors, shine in numbers:
38+
highest = max(colors)
39+
if 30 < shine < 33 or colors.count(highest) != 1:
40+
continue
41+
groups[shine < 33, colors.index(highest)].add(lid)
42+
largest_group = max(groups, key=lambda x: len(groups[x]))
43+
return sum(groups[largest_group])
44+
45+
46+
47+
48+
PARSER = parsers.parse_one_str
49+
TEST_DATA = [
50+
"""\
51+
2456:rrrrrr ggGgGG bbbbBB
52+
7689:rrRrrr ggGggg bbbBBB
53+
3145:rrRrRr gggGgg bbbbBB
54+
6710:rrrRRr ggGGGg bbBBbB""",
55+
"""\
56+
2456:rrrrrr ggGgGG bbbbBB sSsSsS
57+
7689:rrRrrr ggGggg bbbBBB ssSSss
58+
3145:rrRrRr gggGgg bbbbBB sSsSsS
59+
6710:rrrRRr ggGGGg bbBBbB ssSSss""",
60+
"""\
61+
15437:rRrrRR gGGGGG BBBBBB sSSSSS
62+
94682:RrRrrR gGGggG bBBBBB ssSSSs
63+
56513:RRRrrr ggGGgG bbbBbb ssSsSS
64+
76346:rRRrrR GGgggg bbbBBB ssssSs
65+
87569:rrRRrR gGGGGg BbbbbB SssSss
66+
44191:rrrrrr gGgGGG bBBbbB sSssSS
67+
49176:rRRrRr GggggG BbBbbb sSSssS
68+
85071:RRrrrr GgGGgg BBbbbb SSsSss
69+
44303:rRRrrR gGggGg bBbBBB SsSSSs
70+
94978:rrRrRR ggGggG BBbBBb SSSSSS
71+
26325:rrRRrr gGGGgg BBbBbb SssssS
72+
43463:rrrrRR gGgGgg bBBbBB sSssSs
73+
15059:RRrrrR GGgggG bbBBbb sSSsSS
74+
85004:RRRrrR GgGgGG bbbBBB sSssss
75+
56121:RRrRrr gGgGgg BbbbBB sSsSSs
76+
80219:rRRrRR GGGggg BBbbbb SssSSs""",
77+
]
78+
TESTS = [
79+
(1, TEST_DATA[0], 9166),
80+
(2, TEST_DATA[1], 2456),
81+
(3, TEST_DATA[2], 292320),
82+
]
83+
84+
if __name__ == "__main__":
85+
helpers.run_solution(globals())

0 commit comments

Comments
 (0)