Skip to content

Commit a325df5

Browse files
committed
Cache filters
1 parent 9c6f56b commit a325df5

File tree

1 file changed

+27
-12
lines changed

1 file changed

+27
-12
lines changed

src/main.rs

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -128,31 +128,45 @@ fn main() {
128128
println!("{:<17}\t{:<46}\t{:<7}", "Name", "Path", "Status");
129129
}
130130
let mut exercises_done: u16 = 0;
131-
let filters = filter.clone().unwrap_or_default().to_lowercase();
132-
exercises.iter().for_each(|e| {
133-
let fname = format!("{}", e.path.display());
131+
let lowercase_filter = filter
132+
.as_ref()
133+
.map(|s| s.to_lowercase())
134+
.unwrap_or_default();
135+
let filters = lowercase_filter
136+
.split(',')
137+
.filter_map(|f| {
138+
let f = f.trim();
139+
if f.is_empty() {
140+
None
141+
} else {
142+
Some(f)
143+
}
144+
})
145+
.collect::<Vec<_>>();
146+
147+
for exercise in &exercises {
148+
let fname = format!("{}", exercise.path.display());
134149
let filter_cond = filters
135-
.split(',')
136-
.filter(|f| !f.trim().is_empty())
137-
.any(|f| e.name.contains(f) || fname.contains(f));
138-
let status = if e.looks_done() {
150+
.iter()
151+
.any(|f| exercise.name.contains(f) || fname.contains(f));
152+
let status = if exercise.looks_done() {
139153
exercises_done += 1;
140154
"Done"
141155
} else {
142156
"Pending"
143157
};
144158
let solve_cond = {
145-
(e.looks_done() && solved)
146-
|| (!e.looks_done() && unsolved)
159+
(exercise.looks_done() && solved)
160+
|| (!exercise.looks_done() && unsolved)
147161
|| (!solved && !unsolved)
148162
};
149163
if solve_cond && (filter_cond || filter.is_none()) {
150164
let line = if paths {
151165
format!("{fname}\n")
152166
} else if names {
153-
format!("{}\n", e.name)
167+
format!("{}\n", exercise.name)
154168
} else {
155-
format!("{:<17}\t{fname:<46}\t{status:<7}\n", e.name)
169+
format!("{:<17}\t{fname:<46}\t{status:<7}\n", exercise.name)
156170
};
157171
// Somehow using println! leads to the binary panicking
158172
// when its output is piped.
@@ -168,7 +182,8 @@ fn main() {
168182
});
169183
}
170184
}
171-
});
185+
}
186+
172187
let percentage_progress = exercises_done as f32 / exercises.len() as f32 * 100.0;
173188
println!(
174189
"Progress: You completed {} / {} exercises ({:.1} %).",

0 commit comments

Comments
 (0)