From 7eae195b2a73a7a9ee7b183745798b12592b8a59 Mon Sep 17 00:00:00 2001 From: Alpha Chen Date: Sun, 2 Dec 2018 10:00:34 -0800 Subject: [PATCH] [2018][rust][1.x] refactor --- 2018/rust/src/main.rs | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) 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::().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::().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)