Rust challenge 29/100 - advent of code 2020 day 3 part 1 and 2
Table of content
What is this
The rules of the game are explained in my original post.
29th Challenge
Challenge
Today I’m solving last year’s AoC day 3 2020 using rust macros whenever possible.
Solution
This is the result, it calculates the example correctly, but not the second challenge’s personalized input.. I will have to check tomrrow what is going on.
fn main() {
println!("product: {}",slope_product!(INPUT,0,1,2,3,4));
}
#[macro_export]
macro_rules! slope_product {
( $input:expr,$( $x:expr ),* ) => {
{
let mut prod = 1;
$(
println!("slope: {}",slope!($x,$input));
prod*=slope!($x,$input);
)*
prod
}
};
}
#[macro_export]
macro_rules! slope {
( $slope:expr,$input:expr ) => {
{
$input.lines()
.enumerate()
.filter(|x| {is_tree!($slope,x.0,x.1)})
.count()
}
};
}
#[macro_export]
macro_rules! is_tree {
(4,$i:expr,$s:expr) => {
{
match $i % 2 {
0 => is_tree!(0,$i,$s),
_ => false
}
}
};
($slope:expr,$i:expr,$s:expr) => {
{
$s.chars().nth(($i*(1+$slope*2))%$s.chars().count()).unwrap() == '#'
}
};
}
const INPUT: &str ="..##.........##.........##.........##.........##.........##.......
#...#...#..#...#...#..#...#...#..#...#...#..#...#...#..#...#...#..
.#....#..#..#....#..#..#....#..#..#....#..#..#....#..#..#....#..#.
..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#
.#...##..#..#...##..#..#...##..#..#...##..#..#...##..#..#...##..#.
..#.##.......#.##.......#.##.......#.##.......#.##.......#.##.....
.#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....#
.#........#.#........#.#........#.#........#.#........#.#........#
#.##...#...#.##...#...#.##...#...#.##...#...#.##...#...#.##...#...
#...##....##...##....##...##....##...##....##...##....##...##....#
.#..#...#.#.#..#...#.#.#..#...#.#.#..#...#.#.#..#...#.#.#..#...#.#
";
To see the full source see github and see the live demo in playground.