refactor: implemented compiler recommendations
This commit is contained in:
parent
4d1d9df6a3
commit
d16d2ec59b
1 changed files with 10 additions and 16 deletions
26
src/main.rs
26
src/main.rs
|
|
@ -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,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue