Некоторый ал¬го¬ритм из одной це¬поч¬ки символов по¬лу¬ча¬ет новую це¬поч¬ку следующим образом. сна¬ча¬ла вычисляется длина ис¬ход¬ной цепочки символов; если она чётна, то дуб¬ли¬ру¬ет¬ся первый сим¬вол цепочки, а если нечётна, то в на¬ча¬ло цепочки до¬бав¬ля¬ет¬ся символ к. в по¬лу¬чен¬ной цепочке сим¬во¬лов каждая буква за¬ме¬ня¬ет¬ся буквой, сле¬ду¬ю¬щей за ней в рус¬ском алфавите (а — на б, б — на в и т. д., а я — на а). по¬лу¬чив¬ша¬я¬ся таким об-ра¬зом цепочка яв¬ля¬ет¬ся результатом ра¬бо¬ты алгоритма. например, если ис¬ход¬ной была це¬поч¬ка нога, то ре¬зуль¬та¬том работы ал-го¬рит¬ма будет це¬поч¬ка оопдб, а если ис¬ход¬ной была це¬поч¬ка тон, то ре-зуль¬та¬том работы ал¬го¬рит¬ма будет це¬поч¬ка лупо. дана це¬поч¬ка символов грот. какая це¬поч¬ка символов получится, если к дан¬ной цепочке при¬ме¬нить описанный ал¬го¬ритм дважды (т. е. при¬ме¬нить алгоритм к дан¬ной цепочке, а затем к ре¬зуль¬та¬ту вновь при¬ме¬нить алгоритм)? рус¬ский алфавит:
===== PascalABC.NET =====
function S(a: array[,] of integer) :=
a.Cols.Where(p -> p.All(q -> q >= 0)).SelectMany(p -> p).Sum;
function M(a: array[,] of integer): integer;
begin
var n := a.RowCount;
Result := integer.MaxValue;
var s: integer;
for var i := 0 to n - 2 do
begin
s := 0;
for var j := 0 to i do
s += Abs(a[i - j, j]);
if s < Result then
Result := s
end;
for var j := 1 to n - 1 do
begin
s := 0;
for var i := n - 1 downto j do
s += Abs(a[i, n - i + j - 1]);
if s < Result then
Result := s
end
end;
begin
var n := ReadInteger('n =');
var a := MatrRandom(n, n, -10, 30);
a.Println;
S(a).Println;
M(a).Println;
end.