Skip to content

Commit f43e3e0

Browse files
committed
optimizations
1 parent 0d22566 commit f43e3e0

File tree

5 files changed

+49
-43
lines changed

5 files changed

+49
-43
lines changed

src/year2017/day17/day17.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,21 @@ impl Puzzle {
2525
}
2626

2727
/// Solve part two.
28-
fn part2(&self) -> usize {
29-
let mut buflen = 1;
28+
const fn part2(&self) -> usize {
29+
let step = self.step + 1;
30+
let mut buflen: usize = 1;
3031
let mut pos = 0;
3132
let mut result = 0;
3233

33-
for i in 1..50_000_000 {
34-
pos = (pos + self.step) % buflen + 1;
35-
buflen += 1;
36-
if pos == 1 {
37-
result = i;
34+
while buflen <= 50_000_000 {
35+
if pos == 0 {
36+
result = buflen;
3837
}
39-
}
4038

39+
let skip = (buflen - pos).div_ceil(step);
40+
buflen += skip;
41+
pos = (pos + skip * step) % buflen;
42+
}
4143
result
4244
}
4345
}

src/year2018/day11/day11.rs

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
//! [Day 11: Chronal Charge](https://adventofcode.com/2018/day/11)
22
3+
use rayon::prelude::*;
4+
35
struct Puzzle {
46
serial_number: i32,
57
}
@@ -47,19 +49,16 @@ impl Puzzle {
4749

4850
/// Solve part two.
4951
fn part2(&self) -> String {
50-
let mut max = (0, 0, 0, 0);
51-
52-
for size in 3..300 {
53-
let (x, y, p) = self.square_power(size);
54-
55-
if p < 0 {
56-
break;
57-
}
58-
59-
if p > max.0 {
60-
max = (p, x, y, size);
61-
}
62-
}
52+
let max = (3..300)
53+
.par_bridge()
54+
.map(|size| {
55+
let (x, y, p) = self.square_power(size);
56+
57+
if p < 0 { None } else { Some((p, x, y, size)) }
58+
})
59+
.while_some()
60+
.max()
61+
.unwrap();
6362

6463
format!("{},{},{}", max.1, max.2, max.3)
6564
}

src/year2018/day6/day6.rs

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
//! [Day 6: Chronal Coordinates](https://adventofcode.com/2018/day/6)
22
3+
use rayon::prelude::*;
4+
35
const N: usize = 512;
46

57
struct Puzzle {
@@ -99,25 +101,25 @@ impl Puzzle {
99101

100102
/// Solve part two.
101103
fn part2(&self, limit: i32) -> u32 {
102-
let mut result = 0;
103-
104-
for y in -limit..(limit + 400) {
105-
for x in -limit..(limit + 400) {
106-
let mut d = 0;
107-
108-
for &(px, py) in &self.points {
109-
d += (x - px).abs() + (y - py).abs();
110-
if d >= limit {
111-
break;
112-
}
113-
}
114-
115-
if d < limit {
116-
result += 1;
117-
}
118-
}
119-
}
120-
result
104+
(-limit..(limit + 400))
105+
.par_bridge()
106+
.map(|y| {
107+
(-limit..(limit + 400))
108+
.map(|x| {
109+
let mut d = 0;
110+
111+
for &(px, py) in &self.points {
112+
d += (x - px).abs() + (y - py).abs();
113+
if d >= limit {
114+
break;
115+
}
116+
}
117+
118+
u32::from(d < limit)
119+
})
120+
.sum::<u32>()
121+
})
122+
.sum()
121123
}
122124
}
123125

src/year2020/day19/day19.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
//! [Day 19: Monster Messages](https://adventofcode.com/2020/day/19)
22
33
use rustc_hash::FxHashMap;
4+
use rayon::prelude::*;
45

56
enum Rule {
67
Ch(char),
@@ -112,7 +113,7 @@ impl Rules {
112113

113114
fn solve(&self, messages: &[String]) -> usize {
114115
messages
115-
.iter()
116+
.par_iter()
116117
.filter(|message| self.matches(0, message))
117118
.count()
118119
}

src/year2024/day7/day7.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
//! [Day 7: Bridge Repair](https://adventofcode.com/2024/day/7)
22
3+
use rayon::prelude::*;
4+
35
struct Equation {
46
test_value: u64,
57
values: Vec<u64>,
@@ -107,7 +109,7 @@ impl Puzzle {
107109
/// Solve part one.
108110
fn part1(&self) -> u64 {
109111
self.equations
110-
.iter()
112+
.par_iter()
111113
.filter(|e| Self::check_two_operators(e))
112114
.map(|x| x.test_value)
113115
.sum()
@@ -116,7 +118,7 @@ impl Puzzle {
116118
/// Solve part two.
117119
fn part2(&self) -> u64 {
118120
self.equations
119-
.iter()
121+
.par_iter()
120122
.filter(|e| Self::check_three_operators(e))
121123
.map(|x| x.test_value)
122124
.sum()

0 commit comments

Comments
 (0)