From 2fa6c40f332ee27842c5b5e7adac4a3877db0960 Mon Sep 17 00:00:00 2001 From: Johannes Schaefer Date: Fri, 14 Dec 2018 14:09:57 +0100 Subject: [PATCH] day12 part 1 --- input/day12.txt | 34 +++++++++++++++++++++++++++++ src/main.rs | 4 ++-- src/tasks/day12.rs | 54 ++++++++++++++++++++++++++++++++++++++++++++++ src/tasks/mod.rs | 1 + 4 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 input/day12.txt create mode 100644 src/tasks/day12.rs diff --git a/input/day12.txt b/input/day12.txt new file mode 100644 index 0000000..1f17f78 --- /dev/null +++ b/input/day12.txt @@ -0,0 +1,34 @@ +initial state: ..##.#######...##.###...#..#.#.#..#.##.#.##....####..........#..#.######..####.#.#..###.##..##..#..# + +#..#. => . +..#.. => . +..#.# => # +##.#. => . +.#... => # +#.... => . +##### => # +.#.## => . +#.#.. => . +#.### => # +.##.. => # +##... => . +#...# => # +####. => # +#.#.# => . +#..## => . +.#### => . +...## => . +..### => # +.#..# => . +##..# => # +.#.#. => . +..##. => . +###.. => . +###.# => # +#.##. => # +..... => . +.##.# => # +....# => . +##.## => # +...#. => # +.###. => . diff --git a/src/main.rs b/src/main.rs index 3924703..74a42dd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,4 @@ fn main() { - // aoc_2018::tasks::day11::task1(); - aoc_2018::tasks::day11::task2_fast(); + aoc_2018::tasks::day12::task1(); + // aoc_2018::tasks::day11::task2_fast(); } diff --git a/src/tasks/day12.rs b/src/tasks/day12.rs new file mode 100644 index 0000000..e36a713 --- /dev/null +++ b/src/tasks/day12.rs @@ -0,0 +1,54 @@ +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); +} diff --git a/src/tasks/mod.rs b/src/tasks/mod.rs index 490893f..47112b7 100644 --- a/src/tasks/mod.rs +++ b/src/tasks/mod.rs @@ -9,3 +9,4 @@ pub mod day08; pub mod day09; pub mod day10; pub mod day11; +pub mod day12;