program ShiftLettersProgram;
{
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"
}
function ShiftLetters(str: string; shifts: array of Integer): string;
var
size, i, asciiCode: Integer;
arr: array of Char;
begin
size := Length(shifts);
SetLength(arr, Length(str));
{ copy characters into arr }
for i := 1 to Length(str) do
arr[i-1] := str[i];
for i := size - 1 downto 0 do
begin
if (i + 1 < size) then
shifts[i] := shifts[i] + shifts[i + 1];
shifts[i] := shifts[i] mod 26;
asciiCode := Ord(str[i+1]) - Ord('a');
asciiCode := asciiCode + shifts[i];
if asciiCode > 25 then
asciiCode := asciiCode - 26;
arr[i] := Chr(Ord('a') + asciiCode);
end;
{ build result string }
ShiftLetters := '';
for i := 0 to High(arr) do
ShiftLetters := ShiftLetters + arr[i];
end;
var
s: string;
shifts: array[0..2] of Integer;
begin
s := 'aaa';
shifts[0] := 1;
shifts[1] := 2;
shifts[2] := 3;
s := ShiftLetters(s, shifts);
WriteLn(s);
end.
(*
run:
gfd
*)