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> { let file = File::open("inputs/day14.txt")?; let mut lines = io::BufReader::new(file).lines(); let mut polymer_template: Vec = 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 = 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 = 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(()) }