summaryrefslogtreecommitdiff
path: root/2024/04/rust/src/main.rs
diff options
context:
space:
mode:
authormhsn <mail@mhsn.net>2025-06-02 16:58:43 +0000
committermhsn <mail@mhsn.net>2025-06-02 16:58:43 +0000
commitd224561df0ae15918f65edac700d5ec4faf98642 (patch)
tree7e8a8da28954897ca73b2e16f2db7e5437eceedd /2024/04/rust/src/main.rs
parent5bff2e34df1933d765731519d6da128ae00bac38 (diff)
downloadaoc-d224561df0ae15918f65edac700d5ec4faf98642.tar.gz
aoc-d224561df0ae15918f65edac700d5ec4faf98642.zip
2024-04 rust p1
Diffstat (limited to '2024/04/rust/src/main.rs')
-rw-r--r--2024/04/rust/src/main.rs35
1 files changed, 35 insertions, 0 deletions
diff --git a/2024/04/rust/src/main.rs b/2024/04/rust/src/main.rs
new file mode 100644
index 0000000..fd6a715
--- /dev/null
+++ b/2024/04/rust/src/main.rs
@@ -0,0 +1,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()
+}