diff options
| author | mhsn <mail@mhsn.net> | 2026-03-18 21:48:13 +0000 |
|---|---|---|
| committer | mhsn <mail@mhsn.net> | 2026-03-18 21:48:13 +0000 |
| commit | 86bac31392a76da84817eec020d2b84d099b3cc1 (patch) | |
| tree | e2ee52db59b86b914d5b4bcceb19c9b5d899fff4 /2024/08/rust/src | |
| parent | 62fe361fc42dea75deaf7ac31c0ba6ba80e26a9c (diff) | |
| download | puzzles-master.tar.gz puzzles-master.zip | |
Diffstat (limited to '2024/08/rust/src')
| -rw-r--r-- | 2024/08/rust/src/main.rs | 74 |
1 files changed, 0 insertions, 74 deletions
diff --git a/2024/08/rust/src/main.rs b/2024/08/rust/src/main.rs deleted file mode 100644 index 4fc3286..0000000 --- a/2024/08/rust/src/main.rs +++ /dev/null @@ -1,74 +0,0 @@ -use std::{ - collections::{HashMap, HashSet}, - io, -}; - -fn main() -> io::Result<()> { - let mut antennae: HashMap<char, Vec<(i32, i32)>> = HashMap::new(); - - let grid = io::stdin() - .lines() - .flatten() - .map(|s| s.chars().collect()) - .collect::<Vec<Vec<char>>>(); - - let max = grid.first().unwrap().len() as i32; - let may = grid.len() as i32; - grid.iter() - .enumerate() - .flat_map(|(y, row)| { - row.iter() - .enumerate() - .filter(|(_, &c)| c != '.') - .map(move |(x, &c)| (c, (x as i32, y as i32))) - }) - .for_each(|(c, p)| antennae.entry(c).or_default().push(p)); - - let mut silver = HashSet::new(); - let mut gold = HashSet::new(); - for ps in antennae.values() { - for (n, &p) in ps.iter().enumerate() { - for &t in &ps[n+1..] { - antinodes(p, t, (max, may), false).for_each(|n| { - silver.insert(n); - }); - antinodes(p, t, (max, may), true).for_each(|n| { - gold.insert(n); - }); - } - } - } - - let silver = silver.len(); - let gold = gold.len(); - println!("silver: {silver}"); - println!("gold: {gold}"); - - return Ok(()); -} - -fn antinodes( - a: (i32, i32), - b: (i32, i32), - max: (i32, i32), - gold: bool, -) -> impl Iterator<Item = (i32, i32)> { - let dx = b.0 - a.0; - let dy = b.1 - a.1; - let in_range = move |(x, y)| (0..max.0).contains(&x) && (0..max.1).contains(&y); - if !gold { - vec![(a.0 - dx, a.1 - dy), (b.0 + dx, b.1 + dy)] - } else { - (0..) - .map(|n| (a.0 - n * dx, a.1 - n * dy)) - .take_while(move |&p| in_range(p)) - .chain( - (0..) - .map(|n| (b.0 + n * dx, b.1 + n * dy)) - .take_while(move |&p| in_range(p)), - ) - .collect() - } - .into_iter() - .filter(move |&p| in_range(p)) -} |
