Skip to content

Commit 65d3be8

Browse files
committed
Improve Day 4
1 parent 7cef301 commit 65d3be8

File tree

2 files changed

+15
-11
lines changed

2 files changed

+15
-11
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@ Solutions for [Advent of Code](https://adventofcode.com/) in [Rust](https://www.
2929
| [Day 1](./src/bin/01.rs) | `87.7µs` | `115.4µs` |
3030
| [Day 2](./src/bin/02.rs) | `245.2µs` | `552.3µs` |
3131
| [Day 3](./src/bin/03.rs) | `403.3µs` | `403.8µs` |
32-
| [Day 4](./src/bin/04.rs) | `37.5ms` | `2.1ms` |
32+
| [Day 4](./src/bin/04.rs) | `7.0ms` | `777.1µs` |
3333
| [Day 5](./src/bin/05.rs) | `552.9µs` | `373.3µs` |
3434
| [Day 6](./src/bin/06.rs) | `66.1µs` | `54.5ms` |
3535
| [Day 7](./src/bin/07.rs) | `2.3ms` | `928.1ms` |
3636
| [Day 8](./src/bin/08.rs) | `39.3µs` | `85.2µs` |
3737
| [Day 9](./src/bin/09.rs) | `8.1ms` | `9.3ms` |
3838
| [Day 10](./src/bin/10.rs) | `1.6ms` | `1.4ms` |
3939

40-
**Total: 1047.82ms**
40+
**Total: 1016.00ms**
4141
<!--- benchmarking table --->
4242

4343
---

src/bin/04.rs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,26 @@ pub fn part_one(i: &str) -> Option<u32> {
1616
let l: Vec<Vec<char>> = i.lines().map(|s| s.chars().collect()).collect();
1717
Some((0..l.len()).fold(0, |a, i| {
1818
a + (0..l[i].len()).fold(0, |b, j| {
19-
b + A!(l[i][j..j + 4].iter())
20-
+ A!(l[i][j - 3..j + 1].iter().rev())
21-
+ A!(l[i..i + 4].iter().map(|l| l[j]))
22-
+ A!(l[i - 3..i + 1].iter().rev().map(|l| l[j]))
23-
+ A!(l[i..i + 4].iter().enumerate().map(|(k, l)| l[j + k]))
24-
+ A!(l[i..i + 4].iter().enumerate().map(|(k, l)| l[j - k]))
25-
+ A!(l[i - 3..i + 1].iter().rev().enumerate().map(|(k, l)| l[j + k]))
26-
+ A!(l[i - 3..i + 1].iter().rev().enumerate().map(|(k, l)| l[j - k]))
19+
b + if l[i][j] != 'X' {
20+
0
21+
} else {
22+
A!(l[i][j..j + 4].iter())
23+
+ A!(l[i][j - 3..j + 1].iter().rev())
24+
+ A!(l[i..i + 4].iter().map(|l| l[j]))
25+
+ A!(l[i - 3..i + 1].iter().rev().map(|l| l[j]))
26+
+ A!(l[i..i + 4].iter().enumerate().map(|(k, l)| l[j + k]))
27+
+ A!(l[i..i + 4].iter().enumerate().map(|(k, l)| l[j - k]))
28+
+ A!(l[i - 3..i + 1].iter().rev().enumerate().map(|(k, l)| l[j + k]))
29+
+ A!(l[i - 3..i + 1].iter().rev().enumerate().map(|(k, l)| l[j - k]))
30+
}
2731
})
2832
}))
2933
}
3034

3135
#[rustfmt::skip]
3236
pub fn part_two(i: &str) -> Option<u32> {
3337
let l:Vec<Vec<char>>=i.lines().map(|s| s.chars().collect()).collect();
34-
Some((1..l.len()-1).map(|i|{(1..l[i].len()-1).map(|j|{[-1,1].map(|d|{matches!((0..3).map(|k|{l[i+k-1][(j as i32+(d*(k as i32-1)))as usize]}).collect::<String>().as_str(),"MAS"|"SAM")}).iter().all(|&x|x)as u32}).sum::<u32>()}).sum())
38+
Some((1..l.len()-1).map(|i|{(1..l[i].len()-1).map(|j|{if l[i][j]!='A'{0}else{[-1,1].map(|d|{matches!((0..3).map(|k|{l[i+k-1][(j as i32+(d*(k as i32-1)))as usize]}).collect::<String>().as_str(),"MAS"|"SAM")}).iter().all(|&x|x)as u32}}).sum::<u32>()}).sum())
3539
}
3640

3741
#[cfg(test)]

0 commit comments

Comments
 (0)