[2017][rust][1.0] refactor
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(),
)