/*
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"
*/
func shiftLetters(_ str: String, _ shifts: inout [Int]) -> String {
let size = shifts.count
var arr = Array(str)
for i in stride(from: size - 1, through: 0, by: -1) {
if i + 1 < size {
shifts[i] += shifts[i + 1]
}
shifts[i] = shifts[i] % 26
var asciiCode = Int(arr[i].asciiValue! - Character("a").asciiValue!)
asciiCode += shifts[i]
if asciiCode > 25 {
asciiCode -= 26
}
arr[i] = Character(UnicodeScalar(Int(Character("a").asciiValue!) + asciiCode)!)
}
return String(arr)
}
var str = "aaa"
var shifts = [1, 2, 3]
str = shiftLetters(str, &shifts)
print(str)
/*
run:
gfd
*/