Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commite7b8a23

Browse files
committed
Added days 2020-21 and 2020-22
1 parentc086762 commite7b8a23

File tree

2 files changed

+327
-0
lines changed

2 files changed

+327
-0
lines changed

‎2020/21-Allergen Assessment.py

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
# -------------------------------- Input data ---------------------------------------- #
2+
importos,grid,graph,dot,assembly,re,itertools
3+
fromcollectionsimportCounter,deque,defaultdict
4+
5+
fromcompassimport*
6+
7+
8+
# This functions come from https://github.com/mcpower/adventofcode - Thanks!
9+
deflmap(func,*iterables):
10+
returnlist(map(func,*iterables))
11+
12+
13+
defints(s:str):
14+
returnlmap(int,re.findall(r"-?\d+",s))# thanks mserrano!
15+
16+
17+
defpositive_ints(s:str):
18+
returnlmap(int,re.findall(r"\d+",s))# thanks mserrano!
19+
20+
21+
deffloats(s:str):
22+
returnlmap(float,re.findall(r"-?\d+(?:\.\d+)?",s))
23+
24+
25+
defpositive_floats(s:str):
26+
returnlmap(float,re.findall(r"\d+(?:\.\d+)?",s))
27+
28+
29+
defwords(s:str):
30+
returnre.findall(r"[a-zA-Z]+",s)
31+
32+
33+
test_data= {}
34+
35+
test=1
36+
test_data[test]= {
37+
"input":"""mxmxvkd kfcds sqjhc nhms (contains dairy, fish)
38+
trh fvjkl sbzzf mxmxvkd (contains dairy)
39+
sqjhc fvjkl (contains soy)
40+
sqjhc mxmxvkd sbzzf (contains fish)""",
41+
"expected": ["5","mxmxvkd,sqjhc,fvjkl"],
42+
}
43+
44+
test="real"
45+
input_file=os.path.join(
46+
os.path.dirname(__file__),
47+
"Inputs",
48+
os.path.basename(__file__).replace(".py",".txt"),
49+
)
50+
test_data[test]= {
51+
"input":open(input_file,"r+").read(),
52+
"expected": ["2410","tmp,pdpgm,cdslv,zrvtg,ttkn,mkpmkx,vxzpfp,flnhl"],
53+
}
54+
55+
56+
# -------------------------------- Control program execution ------------------------- #
57+
58+
case_to_test="real"
59+
part_to_test=2
60+
61+
# -------------------------------- Initialize some variables ------------------------- #
62+
63+
puzzle_input=test_data[case_to_test]["input"]
64+
puzzle_expected_result=test_data[case_to_test]["expected"][part_to_test-1]
65+
puzzle_actual_result="Unknown"
66+
67+
68+
# -------------------------------- Actual code execution ----------------------------- #
69+
70+
all_ingredients=defaultdict(int)
71+
all_allergens= {}
72+
nb_allergens=defaultdict(int)
73+
allergens_ingredients= {}
74+
75+
forstringinpuzzle_input.split("\n"):
76+
if"contains"instring:
77+
ingredients=string.split(" (")[0].split(" ")
78+
allergens=string.split("(contains ")[1][:-1].split(", ")
79+
ifisinstance(allergens,str):
80+
allergens= [allergens]
81+
82+
forallergeninallergens:
83+
nb_allergens[allergen]+=1
84+
ifallergennotinall_allergens:
85+
all_allergens[allergen]=ingredients.copy()
86+
allergens_ingredients[allergen]=defaultdict(int)
87+
allergens_ingredients[allergen].update(
88+
{ingredient:1foringredientiningredients}
89+
)
90+
91+
else:
92+
foringredientiningredients:
93+
allergens_ingredients[allergen][ingredient]+=1
94+
foringredientinall_allergens[allergen].copy():
95+
ifingredientnotiningredients:
96+
all_allergens[allergen].remove(ingredient)
97+
98+
foringredientiningredients:
99+
all_ingredients[ingredient]+=1
100+
101+
else:
102+
print("does not contain any allergen")
103+
104+
105+
forallergenintest:
106+
ifallergen!="shellfish":
107+
continue
108+
print(
109+
allergen,
110+
test2[allergen],
111+
[ingforing,valintest[allergen].items()ifval==test2[allergen]],
112+
)
113+
114+
sum_ingredients=0
115+
foringredientinall_ingredients:
116+
ifnot (any(ingredientinvalforvalinall_allergens.values())):
117+
sum_ingredients+=all_ingredients[ingredient]
118+
119+
ifpart_to_test==1:
120+
puzzle_actual_result=sum_ingredients
121+
122+
123+
else:
124+
allergens_ingredients= {
125+
aller: [
126+
ing
127+
foring,valinallergens_ingredients[aller].items()
128+
ifval==nb_allergens[aller]
129+
]
130+
forallerinnb_allergens
131+
}
132+
final_allergen= {}
133+
whilelen(final_allergen)!=len(nb_allergens):
134+
forallergen,valinallergens_ingredients.items():
135+
iflen(val)==1:
136+
final_allergen[allergen]=val[0]
137+
138+
allergens_ingredients= {
139+
aller: [
140+
ing
141+
foringinallergens_ingredients[aller]
142+
ifingnotinfinal_allergen.values()
143+
]
144+
forallerinnb_allergens
145+
}
146+
147+
print(final_allergen)
148+
ing_list=""
149+
forallerinsorted(final_allergen.keys()):
150+
ing_list+=final_allergen[aller]+","
151+
puzzle_actual_result=ing_list[:-1]
152+
153+
# -------------------------------- Outputs / results --------------------------------- #
154+
155+
print("Case :",case_to_test,"- Part",part_to_test)
156+
print("Expected result : "+str(puzzle_expected_result))
157+
print("Actual result : "+str(puzzle_actual_result))
158+
# Date created: 2020-12-21 06:07:34.505688
159+
# Part 1: 2020-12-21 07:22:36
160+
# Part 2: 2020-12-21 07:30:15

‎2020/22-Crab Combat.py

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
# -------------------------------- Input data ---------------------------------------- #
2+
importos,grid,graph,copy,dot,assembly,re,itertools
3+
fromcollectionsimportCounter,deque,defaultdict
4+
5+
fromcompassimport*
6+
7+
8+
# This functions come from https://github.com/mcpower/adventofcode - Thanks!
9+
deflmap(func,*iterables):
10+
returnlist(map(func,*iterables))
11+
12+
13+
defints(s:str):
14+
returnlmap(int,re.findall(r"-?\d+",s))# thanks mserrano!
15+
16+
17+
defpositive_ints(s:str):
18+
returnlmap(int,re.findall(r"\d+",s))# thanks mserrano!
19+
20+
21+
deffloats(s:str):
22+
returnlmap(float,re.findall(r"-?\d+(?:\.\d+)?",s))
23+
24+
25+
defpositive_floats(s:str):
26+
returnlmap(float,re.findall(r"\d+(?:\.\d+)?",s))
27+
28+
29+
defwords(s:str):
30+
returnre.findall(r"[a-zA-Z]+",s)
31+
32+
33+
test_data= {}
34+
35+
test=1
36+
test_data[test]= {
37+
"input":"""Player 1:
38+
9
39+
2
40+
6
41+
3
42+
1
43+
44+
Player 2:
45+
5
46+
8
47+
4
48+
7
49+
10""",
50+
"expected": ["306","291"],
51+
}
52+
53+
test+=1
54+
test_data[test]= {
55+
"input":"""Player 1:
56+
43
57+
19
58+
59+
Player 2:
60+
2
61+
29
62+
14
63+
64+
""",
65+
"expected": ["Unknown","1 wins"],
66+
}
67+
68+
test="real"
69+
input_file=os.path.join(
70+
os.path.dirname(__file__),
71+
"Inputs",
72+
os.path.basename(__file__).replace(".py",".txt"),
73+
)
74+
test_data[test]= {
75+
"input":open(input_file,"r+").read(),
76+
"expected": ["30197","34031"],
77+
}
78+
79+
80+
# -------------------------------- Control program execution ------------------------- #
81+
82+
case_to_test="real"
83+
part_to_test=2
84+
85+
# -------------------------------- Initialize some variables ------------------------- #
86+
87+
puzzle_input=test_data[case_to_test]["input"]
88+
puzzle_expected_result=test_data[case_to_test]["expected"][part_to_test-1]
89+
puzzle_actual_result="Unknown"
90+
91+
92+
# -------------------------------- Actual code execution ----------------------------- #
93+
94+
ifpart_to_test==1:
95+
players=puzzle_input.split("\n\n")
96+
cards= [ints(player)fori,playerinenumerate(players)]
97+
cards[0].pop(0)
98+
cards[1].pop(0)
99+
100+
whilelen(cards[0])!=0andlen(cards[1])!=0:
101+
ifcards[0][0]>=cards[1][0]:
102+
cards[0].append(cards[0].pop(0))
103+
cards[0].append(cards[1].pop(0))
104+
else:
105+
cards[1].append(cards[1].pop(0))
106+
cards[1].append(cards[0].pop(0))
107+
108+
winner=cards[0]+cards[1]
109+
110+
score=sum([card* (len(winner)-i)fori,cardinenumerate(winner)])
111+
112+
puzzle_actual_result=score
113+
114+
115+
else:
116+
117+
deffind_winner(cards):
118+
previous_decks= []
119+
120+
whilelen(cards[0])!=0andlen(cards[1])!=0:
121+
# #print ('before', cards)
122+
ifcardsinprevious_decks:
123+
return (0,0)
124+
previous_decks.append(copy.deepcopy(cards))
125+
126+
ifcards[0][0]<len(cards[0])andcards[1][0]<len(cards[1]):
127+
# #print ('subgame')
128+
winner,score=find_winner(
129+
[cards[0][1 :cards[0][0]+1],cards[1][1 :cards[1][0]+1]]
130+
)
131+
# #print ('subgame won by', winner)
132+
cards[winner].append(cards[winner].pop(0))
133+
cards[winner].append(cards[1-winner].pop(0))
134+
135+
elifcards[0][0]>=cards[1][0]:
136+
cards[0].append(cards[0].pop(0))
137+
cards[0].append(cards[1].pop(0))
138+
else:
139+
cards[1].append(cards[1].pop(0))
140+
cards[1].append(cards[0].pop(0))
141+
142+
winner= [iforiin (0,1)ifcards[i]!= []][0]
143+
144+
score=sum(
145+
[card* (len(cards[winner])-i)fori,cardinenumerate(cards[winner])]
146+
)
147+
148+
return (winner,score)
149+
150+
players=puzzle_input.split("\n\n")
151+
cards= [ints(player)fori,playerinenumerate(players)]
152+
cards[0].pop(0)
153+
cards[1].pop(0)
154+
155+
# #print (find_winner(cards))
156+
157+
puzzle_actual_result=find_winner(cards)[1]
158+
159+
160+
# -------------------------------- Outputs / results --------------------------------- #
161+
162+
print("Case :",case_to_test,"- Part",part_to_test)
163+
print("Expected result : "+str(puzzle_expected_result))
164+
print("Actual result : "+str(puzzle_actual_result))
165+
# Date created: 2020-12-22 06:31:42.000598
166+
# Part 1: 2020-12-22 06:38:55
167+
# Part 2: 2020-12-22 07:01:53

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp