How to shift letters in a string x times by giving a vector of shifts in Rust

1 Answer

0 votes
/*
 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

*/

 



answered Dec 4, 2025 by avibootz

Related questions

...