Skip to content

Commit c4fff44

Browse files
committed
Tidy code
1 parent 6895ea2 commit c4fff44

File tree

14 files changed

+69
-69
lines changed

14 files changed

+69
-69
lines changed

src/lib.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
macro_rules! library {
1414
($year:tt $description:literal $($day:tt),*) => {
1515
#[doc = concat!("# ", $description)]
16-
pub mod $year {$(pub mod $day;)*}
16+
pub mod $year {
17+
$(pub mod $day;)*
18+
}
1719
}
1820
}
1921

src/main.rs

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,32 @@ use aoc::util::parse::*;
33
use aoc::*;
44
use std::env::args;
55
use std::fs::read_to_string;
6-
use std::iter::empty;
76
use std::time::{Duration, Instant};
87

98
fn main() {
109
// Parse command line options
11-
let args: Vec<_> = args().collect();
12-
let args: Vec<_> = args.iter().map(String::as_str).collect();
13-
let mut iter = args.iter().flat_map(|arg| arg.iter_unsigned::<u32>());
10+
let mut iter = args().flat_map(|arg| arg.as_str().iter_unsigned().collect::<Vec<u32>>());
1411
let (year, day) = (iter.next(), iter.next());
1512

13+
let solutions = [
14+
year2015(),
15+
year2016(),
16+
year2017(),
17+
year2018(),
18+
year2019(),
19+
year2020(),
20+
year2021(),
21+
year2022(),
22+
year2023(),
23+
year2024(),
24+
];
25+
1626
// Filter solutions then pretty print output.
17-
let (stars, duration) = empty()
18-
.chain(year2015())
19-
.chain(year2016())
20-
.chain(year2017())
21-
.chain(year2018())
22-
.chain(year2019())
23-
.chain(year2020())
24-
.chain(year2021())
25-
.chain(year2022())
26-
.chain(year2023())
27-
.chain(year2024())
28-
.filter(|solution| year.is_none_or(|y| y == solution.year))
29-
.filter(|solution| day.is_none_or(|d| d == solution.day))
27+
let (stars, duration) = solutions
28+
.into_iter()
29+
.flatten()
30+
.filter(|s| year.is_none_or(|y| y == s.year))
31+
.filter(|s| day.is_none_or(|d| d == s.day))
3032
.fold((0, Duration::ZERO), |(stars, duration), Solution { year, day, wrapper }| {
3133
let path = format!("input/year{year}/day{day:02}.txt");
3234

@@ -50,7 +52,7 @@ fn main() {
5052
});
5153

5254
// Optionally print totals.
53-
if args.contains(&"--totals") {
55+
if args().any(|arg| arg == "--totals") {
5456
println!("{BOLD}{YELLOW}⭐ {}{RESET}", stars);
5557
println!("{BOLD}{WHITE}🕓 {} ms{RESET}", duration.as_millis());
5658
}

src/util/bitset.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ pub struct Bitset<T> {
2222
impl<T> Iterator for Bitset<T>
2323
where
2424
T: Integer<T>,
25-
T: TryInto<usize>,
2625
{
2726
type Item = usize;
2827

@@ -34,7 +33,6 @@ where
3433

3534
let tz = self.t.trailing_zeros();
3635
self.t = self.t ^ (T::ONE << tz);
37-
38-
tz.try_into().ok()
36+
Some(tz as usize)
3937
}
4038
}

src/util/grid.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,11 @@ impl Grid<u8> {
6060
impl<T: Copy + PartialEq> Grid<T> {
6161
#[inline]
6262
pub fn find(&self, needle: T) -> Option<Point> {
63-
let to_point = |index| {
63+
self.bytes.iter().position(|&h| h == needle).map(|index| {
6464
let x = (index as i32) % self.width;
6565
let y = (index as i32) / self.width;
6666
Point::new(x, y)
67-
};
68-
self.bytes.iter().position(|&h| h == needle).map(to_point)
67+
})
6968
}
7069
}
7170

src/util/integer.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@ pub trait Integer<T>:
1414
+ Div<Output = T>
1515
+ Mul<Output = T>
1616
+ Rem<Output = T>
17-
+ Shl<Output = T>
18-
+ Shr<Output = T>
17+
+ Shl<u32, Output = T>
18+
+ Shr<u32, Output = T>
1919
+ Sub<Output = T>
2020
{
2121
const ZERO: T;
2222
const ONE: T;
2323
const TEN: T;
2424

25-
fn trailing_zeros(self) -> T;
25+
fn trailing_zeros(self) -> u32;
2626
}
2727

2828
pub trait Unsigned<T>: Integer<T> {}
@@ -37,9 +37,8 @@ macro_rules! integer {
3737
const TEN: $t = 10;
3838

3939
#[inline]
40-
#[allow(trivial_numeric_casts)]
41-
fn trailing_zeros(self) -> $t {
42-
<$t>::trailing_zeros(self) as $t
40+
fn trailing_zeros(self) -> u32 {
41+
<$t>::trailing_zeros(self)
4342
}
4443
}
4544
)*)

src/util/math.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ impl<T: Integer<T>> IntegerMathOps<T> for T {
5353
c = (c * b) % m;
5454
}
5555
b = (b * b) % m;
56-
e = e >> T::ONE;
56+
e = e >> 1;
5757
}
5858

5959
c

src/util/parse.rs

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -105,16 +105,15 @@ fn try_unsigned<T: Unsigned<T>>(bytes: &mut Bytes<'_>) -> Option<T> {
105105
}
106106
};
107107

108-
loop {
109-
let Some(byte) = bytes.next() else { break Some(n) };
108+
for byte in bytes {
110109
let digit = byte.to_decimal();
111-
112-
if digit < 10 {
113-
n = T::TEN * n + T::from(digit);
114-
} else {
115-
break Some(n);
110+
if digit >= 10 {
111+
break;
116112
}
113+
n = T::TEN * n + T::from(digit);
117114
}
115+
116+
Some(n)
118117
}
119118

120119
fn try_signed<T: Signed<T>>(bytes: &mut Bytes<'_>) -> Option<T> {
@@ -130,16 +129,13 @@ fn try_signed<T: Signed<T>>(bytes: &mut Bytes<'_>) -> Option<T> {
130129
}
131130
};
132131

133-
loop {
134-
let Some(byte) = bytes.next() else {
135-
break Some(if negative { -n } else { n });
136-
};
132+
for byte in bytes {
137133
let digit = byte.to_decimal();
138-
139-
if digit < 10 {
140-
n = T::TEN * n + T::from(digit);
141-
} else {
142-
break Some(if negative { -n } else { n });
134+
if digit >= 10 {
135+
break;
143136
}
137+
n = T::TEN * n + T::from(digit);
144138
}
139+
140+
Some(if negative { -n } else { n })
145141
}

src/util/thread.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ impl<'a, T> Iterator for ParIter<'a, T> {
8787

8888
(size > 0).then_some((other, current, size))
8989
})
90-
.max_by_key(|t| t.2);
90+
.max_by_key(|&(_, _, size)| size);
9191

9292
if let Some((other, current, size)) = available {
9393
// Split the work items into two roughly equal piles.

src/year2016/day06.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ pub fn parse(input: &str) -> Input {
1818
input.iter().skip(offset).step_by(stride).for_each(|&b| freq[to_index(b)] += 1);
1919

2020
let (max, _) =
21-
freq.iter().enumerate().filter(|(_, f)| **f > 0).max_by_key(|(_, f)| **f).unwrap();
21+
freq.iter().enumerate().filter(|&(_, &f)| f > 0).max_by_key(|&(_, &f)| f).unwrap();
2222
let (min, _) =
23-
freq.iter().enumerate().filter(|(_, f)| **f > 0).min_by_key(|(_, f)| **f).unwrap();
23+
freq.iter().enumerate().filter(|&(_, &f)| f > 0).min_by_key(|&(_, &f)| f).unwrap();
2424

2525
(to_char(max), to_char(min))
2626
})

src/year2017/day07.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ pub fn parse(input: &str) -> Input<'_> {
6060
}
6161

6262
// The root is the only node without a parent.
63-
let part_one = indices.iter().find(|(_, v)| !nodes[**v].has_parent).unwrap().0;
63+
let part_one = indices.iter().find(|&(_, &v)| !nodes[v].has_parent).unwrap().0;
6464
let mut part_two = 0;
6565

6666
while let Some(index) = todo.pop_front() {

0 commit comments

Comments
 (0)