[2018][rust][1.x] refactor
diff --git a/2018/rust/src/main.rs b/2018/rust/src/main.rs
index cd5d2e3..9c04a65 100644
--- a/2018/rust/src/main.rs
+++ b/2018/rust/src/main.rs
@@ -15,20 +15,23 @@ fn test_day_1_0() {
}
fn day_1_1(input: &str, delimiter: &str) -> String {
- let mut seen = HashMap::new();
- seen.insert(0, 1);
-
- input
- .split(delimiter)
- .flat_map(|change| change.parse::<i32>().ok())
- .cycle()
- .scan((seen, 0), |(seen, freq), change| {
+ vec![0 as i32] // Start with 0 frequency
+ .into_iter()
+ .chain(
+ input
+ .split(delimiter)
+ .map(|change| change.parse::<i32>().unwrap())
+ .cycle(),
+ )
+ .scan(0, |freq, change| {
*freq += change;
-
- let count = seen.entry(freq.clone()).or_insert(0);
+ Some(*freq)
+ })
+ .scan(HashMap::new(), |history, freq| {
+ let count = history.entry(freq).or_insert(0);
*count += 1;
- Some((*freq, *count))
+ Some((freq, *count))
})
.filter(|(_, count)| *count > 1)
.map(|(freq, _)| freq)