[2018][rust][1.x] refactor
change qpuymvqpvrmyqlpxlnyrmlssqulunluv
commit 757ede093a2153700166918f31e0d367326ea508
author Alpha Chen <alpha.chen@gmail.com>
date
parent nnxtwrpw
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)