This commit is contained in:
@@ -5,6 +5,7 @@ Personal stats
|
|||||||
|
|
||||||
--------Part 1-------- --------Part 2--------
|
--------Part 1-------- --------Part 2--------
|
||||||
Day Time Rank Score Time Rank Score
|
Day Time Rank Score Time Rank Score
|
||||||
|
14 00:49:36 7350 0 00:50:14 2214 0
|
||||||
13 00:30:05 3269 0 00:37:02 2884 0
|
13 00:30:05 3269 0 00:37:02 2884 0
|
||||||
12 06:56:08 16817 0 16:08:35 26326 0
|
12 06:56:08 16817 0 16:08:35 26326 0
|
||||||
11 04:38:59 13748 0 04:42:36 13469 0
|
11 04:38:59 13748 0 04:42:36 13469 0
|
||||||
|
|||||||
73
day-14/day-14.py
Normal file
73
day-14/day-14.py
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
from pathlib import Path
|
||||||
|
from collections import Counter, defaultdict
|
||||||
|
|
||||||
|
|
||||||
|
def part_1(input):
|
||||||
|
result = 0
|
||||||
|
template = input.pop(0).strip()
|
||||||
|
input.pop(0)
|
||||||
|
rules = {k.strip(): v.strip()
|
||||||
|
for line in input for k, v in [line.strip().split('->')]}
|
||||||
|
counts = defaultdict(int)
|
||||||
|
for i in range(len(template) - 1):
|
||||||
|
counts[template[i: i + 2]] += 1
|
||||||
|
for _ in range(10):
|
||||||
|
tmp_cnts = counts.copy()
|
||||||
|
for k in tmp_cnts:
|
||||||
|
if k in rules:
|
||||||
|
c = tmp_cnts[k]
|
||||||
|
counts[k] -= c
|
||||||
|
counts[k[0] + rules[k]] += c
|
||||||
|
counts[rules[k] + k[1]] += c
|
||||||
|
char_counts = defaultdict(int)
|
||||||
|
for k in counts:
|
||||||
|
char_counts[k[0]] += counts[k]
|
||||||
|
char_counts[k[1]] += counts[k]
|
||||||
|
char_counts[template[0]] += 1
|
||||||
|
char_counts[template[-1]] += 1
|
||||||
|
for k in char_counts:
|
||||||
|
char_counts[k] //= 2
|
||||||
|
char_counts = sorted(char_counts.items(),
|
||||||
|
key=lambda kv: kv[1])
|
||||||
|
result = char_counts[-1][1] - char_counts[0][1]
|
||||||
|
print("Part 1 result:", result)
|
||||||
|
|
||||||
|
|
||||||
|
def part_2(input):
|
||||||
|
result = 0
|
||||||
|
template = input.pop(0).strip()
|
||||||
|
input.pop(0)
|
||||||
|
rules = {k.strip(): v.strip()
|
||||||
|
for line in input for k, v in [line.strip().split('->')]}
|
||||||
|
counts = defaultdict(int)
|
||||||
|
for i in range(len(template) - 1):
|
||||||
|
counts[template[i: i + 2]] += 1
|
||||||
|
for _ in range(40):
|
||||||
|
tmp_cnts = counts.copy()
|
||||||
|
for k in tmp_cnts:
|
||||||
|
if k in rules:
|
||||||
|
c = tmp_cnts[k]
|
||||||
|
counts[k] -= c
|
||||||
|
counts[k[0] + rules[k]] += c
|
||||||
|
counts[rules[k] + k[1]] += c
|
||||||
|
char_counts = defaultdict(int)
|
||||||
|
for k in counts:
|
||||||
|
char_counts[k[0]] += counts[k]
|
||||||
|
char_counts[k[1]] += counts[k]
|
||||||
|
char_counts[template[0]] += 1
|
||||||
|
char_counts[template[-1]] += 1
|
||||||
|
for k in char_counts:
|
||||||
|
char_counts[k] //= 2
|
||||||
|
char_counts = sorted(char_counts.items(),
|
||||||
|
key=lambda kv: kv[1])
|
||||||
|
result = char_counts[-1][1] - char_counts[0][1]
|
||||||
|
print("Part 2 result:", result)
|
||||||
|
|
||||||
|
|
||||||
|
input = list()
|
||||||
|
p = Path(__file__).with_name('input.txt')
|
||||||
|
with open(p) as f:
|
||||||
|
input = f.readlines()
|
||||||
|
part_1(input.copy())
|
||||||
|
part_2(input.copy())
|
||||||
102
day-14/input.txt
Normal file
102
day-14/input.txt
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
NCOPHKVONVPNSKSHBNPF
|
||||||
|
|
||||||
|
ON -> C
|
||||||
|
CK -> H
|
||||||
|
HC -> B
|
||||||
|
NP -> S
|
||||||
|
NH -> H
|
||||||
|
CB -> C
|
||||||
|
BB -> H
|
||||||
|
BC -> H
|
||||||
|
NN -> C
|
||||||
|
OH -> B
|
||||||
|
SF -> V
|
||||||
|
PB -> H
|
||||||
|
CP -> P
|
||||||
|
BN -> O
|
||||||
|
NB -> B
|
||||||
|
KB -> P
|
||||||
|
PV -> F
|
||||||
|
SH -> V
|
||||||
|
KP -> S
|
||||||
|
OF -> K
|
||||||
|
BS -> V
|
||||||
|
PF -> O
|
||||||
|
BK -> S
|
||||||
|
FB -> B
|
||||||
|
SV -> B
|
||||||
|
BH -> V
|
||||||
|
VK -> N
|
||||||
|
CS -> V
|
||||||
|
FV -> F
|
||||||
|
HS -> C
|
||||||
|
KK -> O
|
||||||
|
SP -> N
|
||||||
|
FK -> B
|
||||||
|
CF -> C
|
||||||
|
HP -> F
|
||||||
|
BF -> O
|
||||||
|
KC -> C
|
||||||
|
VP -> O
|
||||||
|
BP -> P
|
||||||
|
FF -> V
|
||||||
|
NO -> C
|
||||||
|
HK -> C
|
||||||
|
HV -> B
|
||||||
|
PK -> P
|
||||||
|
OV -> F
|
||||||
|
VN -> H
|
||||||
|
PC -> K
|
||||||
|
SB -> H
|
||||||
|
VO -> V
|
||||||
|
BV -> K
|
||||||
|
NC -> H
|
||||||
|
OB -> S
|
||||||
|
SN -> B
|
||||||
|
HF -> P
|
||||||
|
VF -> B
|
||||||
|
HN -> H
|
||||||
|
KS -> S
|
||||||
|
SC -> S
|
||||||
|
CV -> B
|
||||||
|
NS -> P
|
||||||
|
KO -> V
|
||||||
|
FS -> O
|
||||||
|
PH -> K
|
||||||
|
BO -> C
|
||||||
|
FH -> B
|
||||||
|
CO -> O
|
||||||
|
FO -> F
|
||||||
|
VV -> N
|
||||||
|
CH -> V
|
||||||
|
NK -> N
|
||||||
|
PO -> K
|
||||||
|
OK -> K
|
||||||
|
PP -> O
|
||||||
|
OC -> P
|
||||||
|
FC -> N
|
||||||
|
VH -> S
|
||||||
|
PN -> C
|
||||||
|
VB -> C
|
||||||
|
VS -> P
|
||||||
|
HO -> F
|
||||||
|
OP -> S
|
||||||
|
HB -> N
|
||||||
|
CC -> K
|
||||||
|
KN -> S
|
||||||
|
SK -> C
|
||||||
|
OS -> N
|
||||||
|
KH -> B
|
||||||
|
FP -> S
|
||||||
|
NF -> S
|
||||||
|
CN -> S
|
||||||
|
KF -> C
|
||||||
|
SS -> C
|
||||||
|
SO -> S
|
||||||
|
NV -> O
|
||||||
|
FN -> B
|
||||||
|
PS -> S
|
||||||
|
HH -> C
|
||||||
|
VC -> S
|
||||||
|
OO -> C
|
||||||
|
KV -> P
|
||||||
Reference in New Issue
Block a user