This commit is contained in:
2021-12-14 14:23:34 +01:00
parent dfe8f1dfe8
commit 10bd7c4997
8 changed files with 1255 additions and 0 deletions

66
december_14/src/main.rs Normal file
View File

@@ -0,0 +1,66 @@
use std::collections::BTreeMap;
use std::fs::File;
use std::io::{BufReader};
use std::io::prelude::*;
const STEPS: u32 = 40;
fn main(){
let file = File::open("./input.txt").expect("Read failed");
let reader = BufReader::new(file);
let mut line_vec = Vec::new();
for line in reader.lines() {
line_vec.push(line.unwrap());
}
let mut input_seq: Vec<char> = line_vec[0].chars().collect();
let mut rules: Vec<( (char, char) , char )> = Vec::new();
for i in 2..line_vec.len() {
let split_vec: Vec<&str> = line_vec[i].split(" -> ").collect();
let input_vec: Vec<char> = split_vec[0].to_owned().chars().collect();
let input_tuple = (input_vec[0], input_vec[1]);
let output = split_vec[1].chars().collect::<Vec<char>>()[0];
rules.push( ( input_tuple, output ) );
}
for step in 0..STEPS {
let mut output_seq: Vec<char> = Vec::new();
for i in 0..input_seq.len() - 1 {
let first = input_seq[i];
let second = input_seq[i + 1];
output_seq.push(first);
for rule in &rules {
let r_in = rule.0;
let r_out = rule.1;
if first == r_in.0 && second == r_in.1 {
output_seq.push(r_out);
break;
}
}
}
output_seq.push(input_seq[input_seq.len()-1]);
println!("Step: {}", step);
input_seq = output_seq;
}
let mut counts = BTreeMap::new();
for word in input_seq.iter() {
*counts.entry(word).or_insert(0) += 1;
}
let max = counts.iter().max_by_key(|&(_, count)| count);
let min = counts.iter().min_by_key(|&(_, count)| count);
println!("Max: {:?}, Min: {:?}, Diff: {}", min.unwrap(), max.unwrap(), max.unwrap().1 - min.unwrap().1) ;
}