/*
string = "aaa"
After shifting the first 1 letter by 1 = "baa"
After shifting the first 2 letters by 2 = "dca"
After shifting the first 3 letters by 3 = "gfd"
result = "gfd"
*/
fn shift_letters(s: String, mut shifts: Vec<i32>) -> String {
let size = shifts.len();
let mut arr: Vec<char> = s.chars().collect();
for i in (0..size).rev() {
if i + 1 < size {
shifts[i] += shifts[i + 1];
}
shifts[i] = shifts[i] % 26;
let ascii_code = (s.chars().nth(i).unwrap() as u8 - b'a') as i32 + shifts[i];
let mut ascii_code = ascii_code;
if ascii_code > 25 {
ascii_code -= 26;
}
arr[i] = (b'a' + ascii_code as u8) as char;
}
arr.into_iter().collect()
}
fn main() {
let s = String::from("aaa");
let shifts = vec![1, 2, 3];
let result = shift_letters(s, shifts);
println!("{}", result);
}
/*
run:
gfd
*/