This commit is contained in:
Jed
2021-12-14 23:32:40 -05:00
parent e14b287e39
commit 66c67d3648
4 changed files with 263 additions and 0 deletions

82
2021/14-1.py Normal file
View File

@@ -0,0 +1,82 @@
# with open("./2021/14.test") as input_file:
with open("./2021/14.input") as input_file:
input_data = input_file.read()
start_polymer = input_data.split("\n\n")[0]
polymer_rules = input_data.split("\n\n")[1].split("\n")
rules_dict = {}
for one_rule in polymer_rules:
rules_dict[one_rule.split(" -> ")[0]] = one_rule.split(" -> ")[1]
print(rules_dict)
counter = 1
output_dict = {}
for i in range(1, len(start_polymer)):
substring = start_polymer[i-1:i+1]
if substring not in output_dict.keys():
output_dict[substring] = 0
output_dict[substring] += 1
print(output_dict)
while counter <= 10:
temp_dict = {}
for one_key, one_value in output_dict.items():
new_start = one_key[0] + rules_dict[one_key]
new_end = rules_dict[one_key] + one_key[1]
if new_start not in temp_dict.keys():
temp_dict[new_start] = 0
temp_dict[new_start] += one_value
if new_end not in temp_dict.keys():
temp_dict[new_end] = 0
temp_dict[new_end] += one_value
output_dict = {}
output_dict = temp_dict
counter += 1
final_dict = {}
for one_key, one_value in output_dict.items():
for i in range(len(one_key) -1):
if one_key[i] not in final_dict.keys():
final_dict[one_key[i]] = 0
final_dict[one_key[i]] += one_value
final_dict[input_data.split("\n\n")[0][-1]] += 1
print(output_dict)
print(final_dict)
print(max(final_dict.values()) - min(final_dict.values()))
while counter <= 40:
temp_dict = {}
for one_key, one_value in output_dict.items():
new_start = one_key[0] + rules_dict[one_key]
new_end = rules_dict[one_key] + one_key[1]
if new_start not in temp_dict.keys():
temp_dict[new_start] = 0
temp_dict[new_start] += one_value
if new_end not in temp_dict.keys():
temp_dict[new_end] = 0
temp_dict[new_end] += one_value
output_dict = {}
output_dict = temp_dict
counter += 1
final_dict = {}
for one_key, one_value in output_dict.items():
for i in range(len(one_key) -1):
if one_key[i] not in final_dict.keys():
final_dict[one_key[i]] = 0
final_dict[one_key[i]] += one_value
final_dict[input_data.split("\n\n")[0][-1]] += 1
print(output_dict)
print(final_dict)
print(max(final_dict.values()) - min(final_dict.values()))

102
2021/14.input Normal file
View File

@@ -0,0 +1,102 @@
NNSOFOCNHBVVNOBSBHCB
HN -> S
FK -> N
CH -> P
VP -> P
VV -> C
PB -> H
CP -> F
KO -> P
KN -> V
NO -> K
NF -> N
CO -> P
HO -> H
VH -> V
OV -> C
VS -> F
PK -> H
OS -> S
BF -> S
SN -> P
NK -> N
SV -> O
KB -> O
ON -> O
FN -> H
FO -> N
KV -> S
CS -> C
VO -> O
SP -> O
VK -> H
KP -> S
SK -> N
NC -> B
PN -> N
HV -> O
HS -> C
CN -> N
OO -> V
FF -> B
VC -> V
HK -> K
CC -> H
BO -> H
SC -> O
HH -> C
BV -> P
OB -> O
FC -> H
PO -> C
FV -> C
BK -> F
HB -> B
NH -> P
KF -> N
BP -> H
KK -> O
OH -> K
CB -> H
CK -> C
OK -> H
NN -> F
VF -> N
SO -> K
OP -> F
NP -> B
FS -> S
SH -> O
FP -> O
SF -> V
HF -> N
KC -> K
SB -> V
FH -> N
SS -> C
BB -> C
NV -> K
OC -> S
CV -> N
HC -> P
BC -> N
OF -> K
BH -> N
NS -> K
BN -> F
PC -> C
CF -> N
HP -> F
BS -> O
PF -> S
PV -> B
KH -> K
VN -> V
NB -> N
PH -> V
KS -> B
PP -> V
PS -> C
VB -> N
FB -> N

61
2021/14.py Normal file
View File

@@ -0,0 +1,61 @@
# with open("./2021/14.test") as input_file:
with open("./2021/14.input") as input_file:
input_data = input_file.read()
start_polymer = input_data.split("\n\n")[0]
polymer_rules = input_data.split("\n\n")[1].split("\n")
rules_dict = {}
for one_rule in polymer_rules:
rules_dict[one_rule.split(" -> ")[0]] = one_rule.split(" -> ")[1]
print(rules_dict)
counter = 1
while counter <= 10:
output_data = ""
for i in range(1, len(start_polymer)):
substring = start_polymer[i-1:i+1]
output_data += substring[0] + rules_dict[substring]
output_data += start_polymer[-1]
start_polymer = output_data
counter += 1
output_dict = {}
for i in range(len(start_polymer)):
if start_polymer[i] not in output_dict.keys():
output_dict[start_polymer[i]] = 0
output_dict[start_polymer[i]] += 1
print(output_dict)
print(max(output_dict.values()) - min(output_dict.values()))
while counter <= 40:
output_data = ""
for i in range(1, len(start_polymer)):
substring = start_polymer[i-1:i+1]
output_data += substring[0] + rules_dict[substring]
output_data += start_polymer[-1]
start_polymer = output_data
print(counter, end='\r')
counter += 1
output_dict = {}
for i in range(len(start_polymer)):
if start_polymer[i] not in output_dict.keys():
output_dict[start_polymer[i]] = 0
output_dict[start_polymer[i]] += 1
print(output_dict)
print(max(output_dict.values()) - min(output_dict.values()))

18
2021/14.test Normal file
View File

@@ -0,0 +1,18 @@
NNCB
CH -> B
HH -> N
CB -> H
NH -> C
HB -> C
HC -> B
HN -> C
NN -> C
BH -> H
NC -> B
NB -> B
BN -> B
BB -> N
BC -> B
CC -> N
CN -> C