summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--2024/04/rust/Cargo.lock14
-rw-r--r--2024/04/rust/Cargo.toml7
-rw-r--r--2024/04/rust/src/main.rs35
3 files changed, 56 insertions, 0 deletions
diff --git a/2024/04/rust/Cargo.lock b/2024/04/rust/Cargo.lock
new file mode 100644
index 0000000..e0c35ba
--- /dev/null
+++ b/2024/04/rust/Cargo.lock
@@ -0,0 +1,14 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 4
+
+[[package]]
+name = "aoc"
+version = "0.1.0"
+
+[[package]]
+name = "aoc_2024-04"
+version = "0.1.0"
+dependencies = [
+ "aoc",
+]
diff --git a/2024/04/rust/Cargo.toml b/2024/04/rust/Cargo.toml
new file mode 100644
index 0000000..49f5cf9
--- /dev/null
+++ b/2024/04/rust/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc_2024-04"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+aoc = { version = "0.1.0", path = "../../../lib/rust" }
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()
+}