package main
import (
"fmt"
)
/*
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 []int) string {
size := len(shifts)
// Convert string to rune slice for mutability
arr := []rune(str)
for i := size - 1; i >= 0; i-- {
if i + 1 < size {
shifts[i] += shifts[i+1]
}
shifts[i] = shifts[i] % 26
asciiCode := int(str[i]) - int('a')
asciiCode = asciiCode + shifts[i]
if asciiCode > 25 {
asciiCode = asciiCode - 26
}
arr[i] = rune(int('a') + asciiCode)
}
return string(arr)
}
func main() {
str := "aaa"
shifts := []int{1, 2, 3}
str = shiftLetters(str, shifts)
fmt.Println(str)
}
/*
run:
gfd
*/