diff --git a/solutions/scytale_decoder/src/lib.rs b/solutions/scytale_decoder/src/lib.rs index 72d5282f..b0f9f465 100644 --- a/solutions/scytale_decoder/src/lib.rs +++ b/solutions/scytale_decoder/src/lib.rs @@ -1,20 +1,11 @@ pub fn scytale_decoder(s: String, letters_per_turn: u32) -> Option { - if s.is_empty() || letters_per_turn == 0 { - None - } else { - let mut decoded_s = "".to_string(); - let mut start = 0; - - while decoded_s.len() < s.len() { - decoded_s.push(s.chars().nth(start).unwrap()); - - let mut next = start + letters_per_turn as usize; - while next < s.len() { - decoded_s.push(s.chars().nth(next).unwrap()); - next += letters_per_turn as usize; - } - start += 1; - } - Some(decoded_s) + let k = letters_per_turn as usize; + if s.is_empty() || k == 0 { + return None; } + let mut res = vec![String::new(); k]; + for (i, c) in s.chars().enumerate() { + res[i % k].push(c); + } + Some(res.concat()) }