refactor: implemented compiler recommendations

This commit is contained in:
0xffff00 2026-02-13 22:18:22 +01:00
parent 4d1d9df6a3
commit d16d2ec59b
Signed by: Oxfo
GPG key ID: 1AAE7E25860BF1CC

View file

@ -1,24 +1,23 @@
fn main() { fn main() {
let directions = "ENWESWNS".to_string(); let directions = "ENWESWNS";
let res = shorten(directions); 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 characters: Vec<_> = directions.chars().collect();
let mut result = remove_doubles(&characters); let mut result = remove_doubles(&characters);
loop { loop {
let out = remove_doubles(&result); let out = remove_doubles(&result);
if out.len() == result.len() { if out.len() == result.len() {
break; break;
} else { }
result = out; result = out;
} }
} result.iter().map(char::to_string).collect()
result.iter().map(|f| f.to_string()).collect()
} }
fn remove_doubles(characters: &Vec<char>) -> Vec<char> { fn remove_doubles(characters: &[char]) -> Vec<char> {
let mut shortenable_map = vec![false; characters.len()]; let mut shortenable_map = vec![false; characters.len()];
let windows = characters.windows(2); let windows = characters.windows(2);
@ -32,17 +31,12 @@ fn remove_doubles(characters: &Vec<char>) -> Vec<char> {
characters characters
.iter() .iter()
.zip(shortenable_map) .enumerate()
.filter_map(|(c, shortenable)| if shortenable { None } else { Some(*c) }) .filter(|(idx, _)| !shortenable_map[*idx])
.map(|(_, itm)| *itm)
.collect() .collect()
} }
fn is_shortenable(chars: &[char]) -> bool { fn is_shortenable(chars: &[char]) -> bool {
match chars { matches!(*chars, ['N', 'S'] | ['S', 'N'] | ['W', 'E'] | ['E', 'W'])
&['N', 'S'] => true,
&['S', 'N'] => true,
&['W', 'E'] => true,
&['E', 'W'] => true,
_ => false,
}
} }