diff --git a/src/main.rs b/src/main.rs index dbfa669..3f7b872 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,24 +1,23 @@ fn main() { - let directions = "ENWESWNS".to_string(); + let directions = "ENWESWNS"; let res = shorten(directions); - println!("{:?}", res); + println!("{res}"); } -fn shorten(directions: String) -> String { +fn shorten(directions: &str) -> String { let characters: Vec<_> = directions.chars().collect(); let mut result = remove_doubles(&characters); loop { let out = remove_doubles(&result); if out.len() == result.len() { break; - } else { - result = out; } + result = out; } - result.iter().map(|f| f.to_string()).collect() + result.iter().map(char::to_string).collect() } -fn remove_doubles(characters: &Vec) -> Vec { +fn remove_doubles(characters: &[char]) -> Vec { let mut shortenable_map = vec![false; characters.len()]; let windows = characters.windows(2); @@ -32,17 +31,12 @@ fn remove_doubles(characters: &Vec) -> Vec { characters .iter() - .zip(shortenable_map) - .filter_map(|(c, shortenable)| if shortenable { None } else { Some(*c) }) + .enumerate() + .filter(|(idx, _)| !shortenable_map[*idx]) + .map(|(_, itm)| *itm) .collect() } fn is_shortenable(chars: &[char]) -> bool { - match chars { - &['N', 'S'] => true, - &['S', 'N'] => true, - &['W', 'E'] => true, - &['E', 'W'] => true, - _ => false, - } + matches!(*chars, ['N', 'S'] | ['S', 'N'] | ['W', 'E'] | ['E', 'W']) }