AoC2021/src/bin/day14.rs

64 lines
1.7 KiB
Rust

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(())
}