Задача 3 Урок 18

Задача 3 Урок 18:

Имеется текстовый файл в котором содержится не более 30 строк, в каждой строке не более 30 символов (пробелы тоже считаются символами). Цифры и другие символы перемешаны в каждой строке.
Задание: найдите максимальное число, c учетом того, что числом считаются подряд идущие цифры не только по горизонтали, но и по вертикали.

  1. 1
    2
    3
    4
    fsd334rgd
    rfg46gdfg
    ter5tge56
    123gergf

    Ответ: 345

  2. 1
    2
    3
    4
    fsd334rgd
    r      fg
    ter5tge56
    123gergf

    Ответ: 334

  3. 1
    2
    3
    4
    fsd334rgd
    r16hyj3f7
    23tge6f57
    123gergf7

    Ответ: 777

  4. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
              \|/
            -->*<--
              /o\
             /_\_\
            /_/_0_\
           /_o_\_\_\
          /_/_/_/_/o\
         /@\_\_\@\_\_\
        /_/_/O/_/_/_/_\
       /_\_\_\_\_\o\_\_\
      /_/0/_/_/20_/_/@/_\
     /_\_\_\_\_0_\_\_\_\_\
    /_/o/_/_/@/2/_/o/_/0/_\
             [_1_]

    Ответ: 2021

ПРИМЕЧАНИЕ: задача взята из списка соревнования IFF 2020

var f1: text;
    filename, s, n: string;
    i, j, c, int, o, max, smax: integer;
    a: array [1..30] of string;
begin
  filename := 'F:\Pascal\урок 18\input.txt';
  assign(f1, filename);
  reset(f1);
  while not eof(f1) do
    begin
      readln(f1, s);
      c += 1;
      a[c] := s;
      n := '';
      if smax < length(s) then smax := length(s);
      for i := 1 to length(s) + 1 do
       begin
         val(s[i], int, o);
         if o = 0 then n += s[i]
         else
           begin
            val(n, int, o);
            if int > max then max := int;
            n := '';
           end;
       end;
    end;
  for i := 1 to c do
   for j := 1 to smax do
    if length(a[i]) < smax then a[i] += ' ';
  for i := 1 to smax do
   begin
   n := '';
   for j := 1 to c do
    begin
     val(a[j][i], int, o);
     if o = 0 then
      begin
       n += a[j][i];
       if j = c then val(n, int, o);
      end
     else
      begin
       val(n, int, o);
       n := '';
      end;
      if int > max then max := int;
    end;
   end;
  for i := 1 to c do writeln(a[i], '|');
  writeln('Максимальное число: ', max);
  readln();
end.