How to shift letters in a string x times by giving an array of shifts in Pascal

1 Answer

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

*)


 



answered Dec 4, 2025 by avibootz
edited Dec 4, 2025 by avibootz

Related questions

...