Slow part 1 for day 14

This commit is contained in:
Sebastian 2021-12-14 14:43:16 +01:00
parent 65d2d71f64
commit 69ea772f12
3 changed files with 182 additions and 20 deletions

102
inputs/day14.txt Normal file
View File

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

View File

@ -1,21 +1,18 @@
6,10
0,14
9,10
0,3
10,4
4,11
6,0
6,12
4,1
0,13
10,12
3,4
3,0
8,4
1,10
2,14
8,10
9,0
NNCB
fold along y=7
fold along x=5
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

63
src/bin/day14.rs Normal file
View File

@ -0,0 +1,63 @@
use std::collections::HashMap;
use std::error::Error;
use std::fs::File;
use std::io::{self, BufRead};
use std::vec::Vec;
fn main() -> Result<(), Box<dyn Error>> {
let file = File::open("inputs/day14.txt")?;
let mut lines = io::BufReader::new(file).lines();
let mut polymer_template: Vec<char> = lines.next().unwrap().unwrap().chars().collect();
lines.next();
let mut rules: HashMap<(char, char), char> = HashMap::new();
while let Some(Ok(line)) = lines.next() {
if line == "" {
break;
}
let mut parts = line.split(" -> ");
let pair = parts.next().unwrap();
let new = parts.next().unwrap();
rules.insert(
(pair.chars().nth(0).unwrap(), pair.chars().nth(1).unwrap()),
new.chars().nth(0).unwrap(),
);
}
for i in 0..40 {
let mut next_step: Vec<char> = Vec::new();
next_step.push(polymer_template[0]);
for pair in polymer_template.windows(2) {
//next_step.push(pair[0]);
if rules.contains_key(&(pair[0], pair[1])) {
next_step.push(rules[&(pair[0], pair[1])]);
}
next_step.push(pair[1]);
}
polymer_template = next_step;
println!("{} : {}", i, polymer_template.len());
}
let mut dist: HashMap<char, usize> = HashMap::new();
for c in polymer_template.iter() {
let count = dist.get(c).unwrap_or_else(|| &0).clone();
dist.insert(*c, count + 1);
}
let mut counts: Vec<&usize> = dist.values().collect();
counts.sort();
println!(
"Answer1: {}",
*counts.last().unwrap() - *counts.first().unwrap()
);
println!("Answer2: {}", 0);
Ok(())
}