use crate::utils; use std::collections::HashMap; use std::ops::Add; pub fn task1() { let input = utils::read_file("input/day12.txt"); let mut input = input.lines(); let num_generations = 20; let mut state: Vec = "." .repeat(num_generations) .add(&input.next().unwrap()[15..]) .add(&".".repeat(num_generations + 2)) .chars() .collect(); let mut transformations: HashMap = HashMap::new(); input.next(); for line in input { let key = line.split(" => ").nth(0).unwrap(); transformations.insert(key.to_string(), line.chars().last().unwrap()); } for _ in 0..num_generations { println!("{}", state.iter().collect::()); let mut new_state = state.clone(); for (i, c) in new_state[2..state.len() - 2].iter_mut().enumerate() { let next = transformations.get(&state[i..i + 5].iter().collect::()); if let Some(cc) = next { *c = *cc; } else { *c = '.'; } } state = new_state; } println!("{}", state.iter().collect::()); let sum: isize = state .iter() .enumerate() .map(|(i, c)| { if *c == '#' { i as isize - (num_generations as isize) } else { 0 } }) .sum(); println!("Result: {}", sum); }