summaryrefslogtreecommitdiff
path: root/2024/04/rust
diff options
context:
space:
mode:
authormhsn <mail@mhsn.net>2026-03-18 21:48:13 +0000
committermhsn <mail@mhsn.net>2026-03-18 21:48:13 +0000
commit86bac31392a76da84817eec020d2b84d099b3cc1 (patch)
treee2ee52db59b86b914d5b4bcceb19c9b5d899fff4 /2024/04/rust
parent62fe361fc42dea75deaf7ac31c0ba6ba80e26a9c (diff)
downloadpuzzles-master.tar.gz
puzzles-master.zip
add other challenges supportHEADmaster
Diffstat (limited to '2024/04/rust')
-rw-r--r--2024/04/rust/Cargo.lock7
-rw-r--r--2024/04/rust/Cargo.toml4
-rw-r--r--2024/04/rust/src/main.rs82
3 files changed, 0 insertions, 93 deletions
diff --git a/2024/04/rust/Cargo.lock b/2024/04/rust/Cargo.lock
deleted file mode 100644
index 832036f..0000000
--- a/2024/04/rust/Cargo.lock
+++ /dev/null
@@ -1,7 +0,0 @@
-# This file is automatically @generated by Cargo.
-# It is not intended for manual editing.
-version = 4
-
-[[package]]
-name = "aoc_2024-04"
-version = "0.1.0"
diff --git a/2024/04/rust/Cargo.toml b/2024/04/rust/Cargo.toml
deleted file mode 100644
index e872faf..0000000
--- a/2024/04/rust/Cargo.toml
+++ /dev/null
@@ -1,4 +0,0 @@
-[package]
-name = "aoc_2024-04"
-version = "0.1.0"
-edition = "2021"
diff --git a/2024/04/rust/src/main.rs b/2024/04/rust/src/main.rs
deleted file mode 100644
index 191e461..0000000
--- a/2024/04/rust/src/main.rs
+++ /dev/null
@@ -1,82 +0,0 @@
-use std::io;
-
-fn main() -> io::Result<()> {
- let grid = io::stdin()
- .lines()
- .flatten()
- .map(|line| line.chars().collect())
- .collect::<Vec<Vec<char>>>();
- let grid = Grid(grid);
-
- let silver: usize = silver(&grid);
- let gold: usize = gold(&grid);
-
- println!("silver: {silver}");
- println!("gold: {gold}");
-
- return Ok(());
-}
-
-struct Grid(Vec<Vec<char>>);
-
-impl Grid {
- fn at(&self, (x, y): (isize, isize)) -> Option<&char> {
- self.0
- .get(usize::try_from(y).ok()?)?
- .get(usize::try_from(x).ok()?)
- }
-
- fn check<'a>(
- &self,
- (x, y): (isize, isize),
- mut pat: impl Iterator<Item = &'a ((isize, isize), char)>,
- ) -> bool {
- pat.all(|((dx, dy), ch)| self.at((x + dx, y + dy)).is_some_and(|c| c == ch))
- }
-
- fn pts(&self) -> impl Iterator<Item = (isize, isize)> + use<'_> {
- (0..self.0[0].len()).flat_map(|x| (0..self.0.len()).map(move |y| (x as isize, y as isize)))
- }
-}
-
-fn silver(grid: &Grid) -> usize {
- let dirs = vec![
- (-1, -1),
- (-1, 0),
- (-1, 1),
- (0, -1),
- (0, 1),
- (1, -1),
- (1, 0),
- (1, 1),
- ];
-
- let xmases: Vec<Vec<((isize, isize), char)>> = dirs
- .iter()
- .map(|(dx, dy)| {
- (0..4)
- .map(move |n| (dx * n, dy * n))
- .zip("XMAS".chars())
- .collect()
- })
- .collect();
-
- grid.pts()
- .flat_map(|p| xmases.iter().map(move |xmas| grid.check(p, xmas.iter())))
- .filter(|p| *p)
- .count()
-}
-
-fn gold(grid: &Grid) -> usize {
- let dirs = vec![(-1, -1), (1, -1), (0, 0), (-1, 1), (1, 1)];
-
- let xmases: Vec<Vec<((isize, isize), char)>> = vec!["MMASS", "SMASM", "SSAMM", "MSAMS"]
- .iter()
- .map(|x| dirs.clone().into_iter().zip(x.chars()).collect())
- .collect();
-
- grid.pts()
- .flat_map(|p| xmases.iter().map(move |xmas| grid.check(p, xmas.iter())))
- .filter(|p| *p)
- .count()
-}