[2017][rust][1.0] refactor
change olnmoooslwxwtlsrtukuxkrswyqlowkq
commit 93f0a44f1d354a31c53413717f9276d9fbda9625
author Alpha Chen <alpha.chen@gmail.com>
date
parent lxrtkwny
diff --git a/2017/rust/src/day_01.rs b/2017/rust/src/day_01.rs
index 389e8e3..12b3a14 100644
--- a/2017/rust/src/day_01.rs
+++ b/2017/rust/src/day_01.rs
@@ -1,20 +1,21 @@
 use failure::*;
 
 pub fn solve(input: &str) -> Result<String, Error> {
-    let mut input: Vec<u32> = input
+    let input: Vec<u32> = input
         .trim()
         .chars()
         .map(|x| x.to_digit(10).ok_or_else(|| format_err!("")))
         .collect::<Result<_, _>>()?;
 
     // 1
-    let last = input[input.len() - 1];
-    input.push(last);
+    let offset = 1;
+    let offset_iter = input.iter().skip(offset).cycle().take(input.len());
     Ok(
         input
-            .windows(2)
-            .filter(|&a| a[0] == a[1])
-            .map(|a| a[0])
+            .iter()
+            .zip(offset_iter)
+            .filter(|&a| a.0 == a.1)
+            .map(|a| a.0)
             .sum::<u32>()
             .to_string(),
     )