summaryrefslogtreecommitdiff
path: root/2024/04/rust/src/main.rs
blob: fd6a7154d2df35301abbe2f93e7b4227c7d5fa8c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
use aoc::Grid;
use std::io;

fn main() -> io::Result<()> {
    let grid: Vec<Vec<char>> = io::stdin()
        .lines()
        .map(|line| line.unwrap().chars().collect())
        .collect();
    let grid = Grid::new(grid);

    let silver: usize = silver(&grid);
    let gold: u64 = 0;
    println!("silver: {silver}");
    println!("gold: {gold}");

    return Ok(());
}

fn silver(grid: &Grid<char>) -> usize {
    let dirs = [
        (1, 1),
        (1, 0),
        (1, -1),
        (0, 1),
        (0, -1),
        (-1, 1),
        (-1, 0),
        (-1, -1),
    ];
    grid.points()
        .flat_map(|p| dirs.into_iter().map(move |dp| grid.ray(p, dp)))
        .map(|cs| cs.zip("XMAS".chars()).all(|(&a, b)| a == b))
        .filter(|p| *p)
        .count()
}