diff --git a/data/input-03.txt b/data/input-03.txt new file mode 100644 index 0000000..ada25cf --- /dev/null +++ b/data/input-03.txt @@ -0,0 +1,323 @@ +.............#...#....#.....##. +.#...##.........#.#.........#.# +.....##......#.......#......... +.......#...........#.#......... +#...........#...#..#.#......#.. +.........##....#.#...#......... +.....#.........#.#...........#. +....#...............##....##... +#.#.............#..#.......#.#. +...#........................... +......#..#....#.............#.. +........#......#.......#....... +....#.....#..#.#...#.........#. +..#.#.......#.##...#....#.....# +...........#.........#..#...... +#...........#.#..#...#.#.#....# +........#...................... +....#.#.....#....#.......#..#.. +.............................#. +....##..........#.....##......# +......#.....................#.. +..#.....##.......#............. +....#.#..............#.#....... +..#.#........#.....#..##....... +.....#...##.........##....#.#.. +.#....#..#..#...........#...... +.............#.....##........#. +..#....#............#.........# +###..........#........#.......# +#...#..#.#.#.........#..#...... +..#....#......#.............#.. +#...#........#..#...#.....#.... +.#..........#.#........#....... +#.....#.........#..#......#.... +....#....##........#......#.... +.......#....#.....#..#..#.....# +.........#...#.#...#.##........ +.##.##...........#..##..#...... +.#.##....#........#...#........ +.......##.........##.####.....# +....#..##....#................. +.#........#..........#......... +##....##..........##........#.. +#......#...........#....#..#... +.......#..#....##..##.....#.... +.........#.#.#...#.....#....... +......#...#...#....#......#.... +##....#..........#....##....##. +###.........#...#...#.......... +#.....##.#........#.......#.... +#...............#...##.#......# +..#.....####.###......#......#. +....#.......#..........#....... +....##..............#.#.#...... +.......##..#.......#........... +..#.......##....#.......###...# +........#...#.......#.#...#.... +.........##....#..#....#....... +............#.#.......#.#...... +.....#.....#...#....#.##....... +.......#.........#.......#..... +.#..#...#.....#............#.## +.......#.#......##............. +##.#......#.....#.#............ +.#....#.....#............#...#. +.........#.......#.#........... +#............#.##...#..#...#.#. +......#....#.......#....#...... +..........#........#..#.#...... +#..##.......#.........#..#..... +.........#.....##........#.#..# +..#................#........... +....#..#........##.........#..# +###...#....##.#......##.......# +.......#......##..#.......#.... +.......###...#...#..........##. +................#.......#...... +.#......##.##........#......... +....##.#.....##.......#........ +...........#...........#.....#. +..#........#..#.#...#.#........ +#...............#...#.##.##.#.# +................#.......#...... +.#..#......#........#.#........ +...##..#.......#.......#..#.... +.#.....#.#....##..#........#... +........##......#..........#... +.#.......#.......#...#..#...... +.#..##.....#....#............#. +...#..........#....#........#.. +..#.#..#.......#.#.##.......... +#........###.....#.#.......#.## +.....#....##.............#.#..# +..##............#...##......... +...#.........#...........#..... +...#......#.#...#..###......... +.............#...##............ +.....##..##.####.#..#......#.#. +.#...#.....#.....#.#.....#..... +.........#.......###.....#..##. +.##.#..#..........#.##.#.#..... +.#...#...#.#.##......#..#...... +.............#......#......#... +#.....................#......#. +...#.....#.....#....#........#. +................##..#....#..#.. +#.###...#.....................# +...#..#....#.......#.........#. +...........#..#..#...........#. +.......#..#......#....#.#...... +..........#......#..#....#..... +.#.#.....#...#.#...#...#.#....# +.....#.......#............#...# +#.#....#......#......#........# +.#.#..#.........##...#......... +#..###..#...................... +..#.#..#....................... +.##.....#...#......#..#........ +...#...........#...#.......##.. +..#...........#........#....... +........#....#.....#.#......... +..........#...........#.....#.. +......#...#...##.#............. +.#...#...##.................... +............###.........#...... +.#.#...................#..#.... +....#.#...#.#........#.#....... +....#...#...........#.......#.# +...........#............#...##. +.....####....#.#......#.#...... +.##.............#............#. +......#.........#............## +#.#....#...##....#.......#....# +.....#.#....#..#..#...#..#.#..# +.........................#..... +......#.#....###.......#....#.. +.....................##.#...#.# +..#.....#.#.#...#...#.......... +........#..##........#...#...#. +..........#.#.##....#....##.... +.............#..#.............. +..#.##..#.......#...#..#..##..# +..#..#....#.#..........#..#.... +..........#....#...#......#.... +.##...#.......................# +.#.....#....#..........#....... +...........#..#......##.....#.. +......###.#..##....#...#.##.... +.......#..#.#....#............. +...#..#......##.........###.#.. +...........#............##...#. +...#...#...........##.....#.... +..................#............ +.#.#.#...#..............#..##.. +#.#....#........#.........#.##. +#.#.#.......#.....#..........#. +...##.....##.#.....#........... +.#....#..............##...##..# +........##..................... +#..#..#.....###.............#.. +.......#...........#........... +.........#..................... +.......#...#...#.....##........ +......#.........#........#..... +...#....##..#.####.#.......#.#. +.....#..#......#........#.##..# +.##....#......##......#...###.. +..###.#........##.#...#.......# +............#......##....#.#... +.....#....##..##............##. +......##....#.#...#....#.#..#.# +.......#.........#.#.....#.#... +.......#.#....#................ +.##...###..#.....#............# +#.#......#.#..#..#.#...#..#..#. +..#.#.#.....#............#...## +.##....###.........#..#........ +.#..#.#..#.#....#.........##.#. +....#..#...##.##........#...... +........#.#....##....#....#.... +.......#..#..#.#..............# +#....#....#.....#....#......... +.#.###...#....#.......#........ +.........#.#....##....#...#.... +....#.............#.....##.##.. +.....#.....#...##..#.#.##...##. +.........#..#................## +...##..##......#.....#........# +.#....#.....#.#......#..###.... +#.....#..#..................... +....#.#...#.#.................# +.....##..................#..... +#....##...#.##..###...#........ +##.#.........#.......#....#.... +.#.#.............##..#.##...... +...#.#..............#......#... +.............#.........#.....#. +#.......#........#......#.....# +.....#..............#.##.#..... +#......##...................#.. +##.#.....#..........#........#. +#...........##...........#..... +.#...#.....#..#..##....#....... +.....#.........#....##.#....... +#........#......#.............# +.#..................####.#..... +#...#......#....##...#.#..#..#. +............#.#............#... +............#........#.#..###.. +.#..#..#..#.#.#.....#.#........ +#.....#..#.#...#..#..#........# +#................#....#..#..... +....#..#..#.#......#.#..#.....# +.#..#.......#...##.#.#.....#..# +#.....................#.......# +.............#.......#...#..... +....#......#.........###.##.... +....#..#.......#.#........#.... +....#...#....#.#....#.......... +...#..#......#.............#... +.......###.#.........#....#.#.. +..#.....##..................... +.#.#...........#..##....#...... +..........##.#....#.#.......... +...........#.#..#.#..#.#....... +..........#..#...#.....##...... +.....#.........#...#.#..#...... +#.#................#..........# +...#.....##.#..#...#.##.......# +.....##...........#............ +.....#...#...#...#.#.....#..... +...........##.................. +.........#................#.... +......#.....#.#...#.......#.... +...#...#........#...#...#.#.#.. +...............##..#....##...#. +...#.#...........##.......##..# +...........#............#...... +.#....#.#.......##.#.#.#....... +.....#.#..#.#.#................ +.#............#...#.#.......... +.....#.......#.#.......#.....#. +#....#...........#...#....##... +..#...#..##.....#....#..#...... +#.#.........#..#.#..#.#......#. +................#......##...... +#........#..............#....#. +........#..#.#........#..#..#.. +#..........#......#............ +..##.......#..#.......#....#... +.#........#..#..#.#.......##... +................#.............. +#.................#...........# +##..#...................#....## +#..#....#.....#.#..#.#.#......# +#................#.#.#...#..... +.............#..#...#..##...#.# +#..................#........... +..............#..#.....##.....# +..#...............#.#.......... +.....#......#....#..#...#...... +.#......#...##.....###.....#... +...##...##.##....#.#.#..#...... +....#.#.......#..##....#.##.... +...#.........#.#.....#...#...## +.##.#.........##..#.##..#...... +.#...#......#......#.........#. +.............#................. +..........#..............#..... +##...........#...#...###....#.. +....#...............#.......... +.......####.....#......#....... +........#..........#..#........ +..#.......#..#................. +......#.#..##...##....#........ +.##...#........#...#....#...#.. +.......................#....... +.........##..#..#...#....##...# +..#..#...#.....#.........#..#.. +.......#....#.........#...#..#. +.............#................. +.....##..#.....###....##.#..... +....#.#..#..#.#.....##....#..#. +......#..#..............#.##..# +..#..#......#.#.........#..#... +..........#.#..#....#.....#.... +.....................#......... +...#.....#.......##..#.#....... +.....#...#..........###....#.#. +......#.....##............#...# +.......#..........#.#..#...#..# +#...#..#...........#..##..#.... +.#......#.......##.....#..#.... +...#..#....#.......##......#... +........#.......##...#.......#. +.....#........#................ +......#........#....#.......... +...#....#....###.........#.#... +##..............#......#..#.#.. +.........##....#........#..#.#. +.......#.##.#........#........# +.....###..#..#...........#....# +.......#....##.......#.#...#... +#..............#.#....#..#...#. +#..#....#..#.#............#..#. +.#...##.#..................#... +...#...............##.........# +###..............#.#..#.#.#.... +.#......#.#.....##.......#..... +...#.................#.#....... +.#...#....#...#..#......#...#.. +...##....#........#.#.#..#..... +..#.....#........#....#.#...... +...........#.#...#............. +......#.....#.....#.........#.. +.#.##.###...#.##.......#....... +.............#....#.......#.... +..............#...........#.... +.............#..#.#.....#....#. +.......#........##...##..##.... +..##...#............#..#......# +.............#...##.....#...... +.#...##..##.#.........#.##...#. \ No newline at end of file diff --git a/data/output-03.txt b/data/output-03.txt new file mode 100644 index 0000000..9d459f3 --- /dev/null +++ b/data/output-03.txt @@ -0,0 +1,2 @@ +167 +736527114 \ No newline at end of file diff --git a/src/day03.rs b/src/day03.rs new file mode 100644 index 0000000..aacfaef --- /dev/null +++ b/src/day03.rs @@ -0,0 +1,35 @@ +// ==== day 3 + +use crate::utils; +use anyhow::Result; + +fn count_trees(data: &str, right: usize, down: usize) -> Result { + Ok(data + .lines() + .step_by(down) + .enumerate() + .filter(|(i, s)| { + s.chars() + .nth((i * right) % s.len()) + .expect("string index error") + == '#' + }) + .count()) +} + +pub fn run() -> Result<(usize, usize)> { + let data = utils::read_file("data/input-03.txt")?; + let answers = utils::read_i64s("data/output-03.txt")?; + + let p1 = count_trees(&data, 3, 1)?; + assert_eq!(p1, answers[0] as usize); + + let p2 = count_trees(&data, 1, 1)? + * p1 + * count_trees(&data, 5, 1)? + * count_trees(&data, 7, 1)? + * count_trees(&data, 1, 2)?; + assert_eq!(p2, answers[1] as usize); + + Ok((p1, p2)) +} diff --git a/src/main.rs b/src/main.rs index 1a6bd5c..58c1fc9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ use anyhow::Result; mod day01; mod day02; +mod day03; mod utils; // TODO @@ -14,5 +15,6 @@ mod utils; fn main() -> Result<()> { println!("Day 01: {:?}", day01::run()?); println!("Day 02: {:?}", day02::run()?); + println!("Day 03: {:?}", day03::run()?); Ok(()) }