Added Day 3 Part 1
This commit is contained in:
parent
a43f38687b
commit
afe718b7a6
14
small.input
14
small.input
|
@ -1,3 +1,11 @@
|
||||||
1-3 a: abcde
|
..##.......
|
||||||
1-3 b: cdefg
|
#...#...#..
|
||||||
2-9 c: ccccccccc
|
.#....#..#.
|
||||||
|
..#.#...#.#
|
||||||
|
.#...##..#.
|
||||||
|
..#.##.....
|
||||||
|
.#.#.#....#
|
||||||
|
.#........#
|
||||||
|
#.##...#...
|
||||||
|
#...##....#
|
||||||
|
.#..#...#.#
|
||||||
|
|
59
src/main.rs
59
src/main.rs
|
@ -1,33 +1,52 @@
|
||||||
use std::io::{stdin, Read};
|
use std::io::{stdin, Read};
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq, Eq)]
|
||||||
|
enum GridType {
|
||||||
|
Open,
|
||||||
|
Tree,
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let mut input = String::new();
|
let mut input = String::new();
|
||||||
stdin().read_to_string(&mut input).unwrap();
|
stdin().read_to_string(&mut input).unwrap();
|
||||||
|
|
||||||
let count = input
|
let grid = input
|
||||||
.split('\n')
|
.split('\n')
|
||||||
.filter(|x| !x.is_empty())
|
.filter(|x| !x.is_empty())
|
||||||
|
.into_iter()
|
||||||
.map(|x| {
|
.map(|x| {
|
||||||
let mut x = x.split(':');
|
x.as_bytes()
|
||||||
let policy = x.next().unwrap().trim();
|
.into_iter()
|
||||||
let pwd = x.next().unwrap().trim();
|
.map(|y| match y {
|
||||||
let chars = policy.chars().last().unwrap();
|
b'#' => GridType::Tree,
|
||||||
|
b'.' => GridType::Open,
|
||||||
let mut policy = policy.split_whitespace();
|
_ => unreachable!(),
|
||||||
let limits = policy.next().unwrap();
|
})
|
||||||
|
.collect::<Vec<GridType>>()
|
||||||
let mut positions = limits.split('-');
|
|
||||||
let lpos = positions.next().unwrap().parse::<usize>().unwrap();
|
|
||||||
let rpos = positions.next().unwrap().parse::<usize>().unwrap();
|
|
||||||
|
|
||||||
(lpos, rpos, chars, pwd)
|
|
||||||
})
|
})
|
||||||
.filter(|&(lpos, rpos, c, pwd)| {
|
.collect::<Vec<Vec<GridType>>>();
|
||||||
let pwd: Vec<char> = pwd.chars().collect();
|
|
||||||
|
|
||||||
(pwd[lpos - 1] == c || pwd[rpos - 1] == c) && (pwd[lpos - 1] != pwd[rpos - 1])
|
let m = grid.len();
|
||||||
})
|
let n = grid[0].len();
|
||||||
.count();
|
println!("m = {} n = {}", m, n);
|
||||||
|
|
||||||
println!("{}", count);
|
let treecount = calc_trees(&grid, m, n, 3, 1);
|
||||||
|
|
||||||
|
println!("{}", treecount);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn calc_trees(grid: &[Vec<GridType>], m: usize, n: usize, slope_x: usize, slope_y: usize) -> u32 {
|
||||||
|
let mut sx = 0;
|
||||||
|
let mut sy = 0;
|
||||||
|
let mut treecount = if grid[0][0] == GridType::Open { 0 } else { 1 };
|
||||||
|
|
||||||
|
while sx < m - 1 {
|
||||||
|
sy = (sy + slope_x) % n;
|
||||||
|
sx += slope_y;
|
||||||
|
|
||||||
|
if grid[sx][sy] == GridType::Tree {
|
||||||
|
treecount += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return treecount;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user