| 1 | pub fn decrypt(code: Vec<i32>, k: i32) -> Vec<i32> { |
| 2 | if k == 0 { return vec![0; code.len()] } |
| 3 | let mut ret = vec![]; |
| 4 | for i in 0..code.len() { |
| 5 | if k > 0 { |
| 6 | let tail = i + k as usize; |
| 7 | if tail <= code.len() - 1 { |
| 8 | ret.push(code[i+1..=tail].into_iter().sum::<i32>()); |
| 9 | } else { |
| 10 | let tmp: i32 = &code[i+1..].into_iter().sum::<i32>() + |
| 11 | &code[0..tail-code.len()+1].into_iter().sum::<i32>(); |
| 12 | ret.push(tmp); |
| 13 | } |
| 14 | } else { |
| 15 | let head = i as i32 + k; // i =1 k = -2 |
| 16 | if head >= 0 { |
| 17 | ret.push(code[head as usize..i].into_iter().sum::<i32>()); |
| 18 | } else { |
| 19 | let tmp: i32 = &code[0..i].into_iter().sum::<i32>() + |
| 20 | &code[(head + code.len() as i32) as usize..].into_iter().sum::<i32>(); |
| 21 | ret.push(tmp); |
| 22 | } |
| 23 | } |
| 24 | } |
| 25 | ret |
| 26 | } |
| 27 | |
| 28 | fn main() { |
| 29 | println!("{:?}", decrypt(vec![5, 7, 1, 4], 3)); |