Added Day 4 Part 1
This commit is contained in:
parent
be2a7fcef3
commit
7ca65d40dd
24
small.input
24
small.input
|
@ -1,11 +1,13 @@
|
||||||
..##.......
|
ecl:gry pid:860033327 eyr:2020 hcl:#fffffd
|
||||||
#...#...#..
|
byr:1937 iyr:2017 cid:147 hgt:183cm
|
||||||
.#....#..#.
|
|
||||||
..#.#...#.#
|
iyr:2013 ecl:amb cid:350 eyr:2023 pid:028048884
|
||||||
.#...##..#.
|
hcl:#cfa07d byr:1929
|
||||||
..#.##.....
|
|
||||||
.#.#.#....#
|
hcl:#ae17e1 iyr:2013
|
||||||
.#........#
|
eyr:2024
|
||||||
#.##...#...
|
ecl:brn pid:760753108 byr:1931
|
||||||
#...##....#
|
hgt:179cm
|
||||||
.#..#...#.#
|
|
||||||
|
hcl:#cfa07d eyr:2025 pid:166559648
|
||||||
|
iyr:2011 ecl:brn hgt:59in
|
||||||
|
|
74
src/main.rs
74
src/main.rs
|
@ -1,58 +1,46 @@
|
||||||
|
use std::collections::HashMap;
|
||||||
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 grid = input
|
let passports: usize = input
|
||||||
.split('\n')
|
.split("\n\n")
|
||||||
.filter(|x| !x.is_empty())
|
.filter(|x| !x.is_empty())
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
.map(|x| x.replace('\n', " "))
|
||||||
.map(|x| {
|
.map(|x| {
|
||||||
x.as_bytes()
|
let mut map = HashMap::new();
|
||||||
.into_iter()
|
|
||||||
.map(|y| match y {
|
x.split(' ').filter(|x| !x.is_empty()).for_each(|y| {
|
||||||
b'#' => GridType::Tree,
|
let mut y = y.split(':');
|
||||||
b'.' => GridType::Open,
|
let key = y.next().unwrap();
|
||||||
_ => unreachable!(),
|
let value = y.next().unwrap();
|
||||||
})
|
|
||||||
.collect::<Vec<GridType>>()
|
map.insert(key.to_owned(), value.to_owned());
|
||||||
|
});
|
||||||
|
|
||||||
|
map
|
||||||
})
|
})
|
||||||
.collect::<Vec<Vec<GridType>>>();
|
.filter(|map| {
|
||||||
|
validate(&map, "byr")
|
||||||
|
&& validate(&map, "iyr")
|
||||||
|
&& validate(&map, "eyr")
|
||||||
|
&& validate(&map, "hgt")
|
||||||
|
&& validate(&map, "hcl")
|
||||||
|
&& validate(&map, "ecl")
|
||||||
|
&& validate(&map, "pid")
|
||||||
|
})
|
||||||
|
.count();
|
||||||
|
|
||||||
let m = grid.len();
|
println!("{:?}", passports);
|
||||||
let n = grid[0].len();
|
|
||||||
println!("m = {} n = {}", m, n);
|
|
||||||
|
|
||||||
let a = calc_trees(&grid, m, n, 3, 1);
|
|
||||||
let b = calc_trees(&grid, m, n, 1, 1);
|
|
||||||
let c = calc_trees(&grid, m, n, 5, 1);
|
|
||||||
let d = calc_trees(&grid, m, n, 7, 1);
|
|
||||||
let e = calc_trees(&grid, m, n, 1, 2);
|
|
||||||
|
|
||||||
println!("{} {} {} {} {}", a, b, c, d, e);
|
|
||||||
|
|
||||||
println!("{}", a * b * c * d * e);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn calc_trees(grid: &[Vec<GridType>], m: usize, n: usize, slope_x: usize, slope_y: usize) -> u32 {
|
fn validate(map: &HashMap<String, String>, key: &str) -> bool {
|
||||||
let mut sx = 0;
|
if let Some(v) = map.get(key) {
|
||||||
let mut sy = 0;
|
!v.is_empty()
|
||||||
let mut treecount = if grid[0][0] == GridType::Open { 0 } else { 1 };
|
} else {
|
||||||
|
false
|
||||||
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