-
Notifications
You must be signed in to change notification settings - Fork 0
/
adventofcode2021_day14_part1.py
71 lines (53 loc) · 1.52 KB
/
adventofcode2021_day14_part1.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
def read_file(filename):
with open(filename, "r") as file:
lines = file.readlines()
return lines
def get_template(lines):
template = lines[0].strip()
return template
def get_rules(lines):
pairs = []
pairs_with_added_letters = []
rules = []
for i in range(2, len(lines)):
pair = lines[i].split(" ", 1)[0]
pairs.append(pair)
added = lines[i].split(" -> ")[1].strip()
pair_with_added_letter = pair[0] + added
pairs_with_added_letters.append(pair_with_added_letter)
rules.append(pairs)
rules.append(pairs_with_added_letters)
return rules
def step(template, rules) -> str:
line = ""
pairs = rules[0]
pairs_with_added_letters = rules[1]
for i in range(len(template) - 1):
pair = template[i] + template[i+1]
for j in range(len(pairs)):
if pair == pairs[j]:
line += pairs_with_added_letters[j]
break
line += template[len(template) - 1]
return line
lines = read_file("adventofcode2021_day14_input.txt")
template = get_template(lines)
rules = get_rules(lines)
pairs = rules[0]
pairs_with_added_letters = rules[1]
for i in range(10):
line = step(template, rules)
#print(line)
template = line
chars = list(set(line))
print (chars)
counts = []
for char in chars:
counts.append(0)
for char in line:
for i in range(len(chars)):
if char == chars[i]:
counts[i] += 1
break
print(counts)
print(max(counts) - min(counts))