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

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

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

Примеры:

fsd334rgd
rfg46gdfg
ter5tge56
123gergf

Ответ: 345

fsd334rgd
r      fg
ter5tge56
123gergf

Ответ: 334

fsd334rgd
r16hyj3f7
23tge6f57
123gergf7

Ответ: 777

        \|/
        -->*<--
          /o\
         /_\_\
        /_/_0_\
       /_o_\_\_\
      /_/_/_/_/o\
     /@\_\_\@\_\_\
    /_/_/O/_/_/_/_\
   /_\_\_\_\_\o\_\_\
  /_/0/_/_/20_/_/@/_\
 /_\_\_\_\_0_\_\_\_\_\
/_/o/_/_/@/2/_/o/_/0/_\
         [_1_]

Ответ: 2021

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

// алгоритм
-найдем мах из строк. 
-преобразуем по очереди каждую вертикальную строку в горизонтальную попутно ища там больший мах

type typeStrHorisontalArr = array [1..30] of string;
var i,m,z, k, maxHorisont, maxLengthSting, Code, numInt: integer;
    s, mumStr: string;
    f: boolean;
    strHorisontalArr : typeStrHorisontalArr;
    f1:text;
    filename: string;

procedure getMaxNummHorisontal(s: string; var maxHorisont: integer); //   поиск max
begin
  mumStr := '';
  if(length(s) > maxLengthSting) then // поиск самой длинной строки
    maxLengthSting := length(s);
  for i := 1 to length(s) do
    begin
      if((s[i] >= '0') and (s[i] <= '9')) then
        begin
          f:=false; // нельзя делать запись в интегер
          mumStr:=mumStr + s[i];
        end
      else
        f:=true;   // числа закончились, делаем дальше запись в интегер
      if((f) and (mumStr <> '') or (i=length(s))) then //(i=length(s))  если число в конце и ему не хватит итераций на запись в интегер
        begin
          Val(mumStr, numInt, Code);
          mumStr := '';
          f:=false;
          if(numInt > maxHorisont) then  //  если новое число больше старого
            maxHorisont:=numInt;
        end;
    end;
end;

begin
  maxLengthSting := -1;  // мах длина строки в файле
  maxHorisont := -1; // мах число по горизонту
  k:=0; // индексирует массив
  filename := 'C:\Users\Gomynkyl\AppData\Local\Temp\input.txt';
  assign(f1, filename);
  reset(f1);

  while not eof(f1) do
    begin
      readln(f1, s);
      getMaxNummHorisontal(s,maxHorisont);
      k:=k+1;
      strHorisontalArr[k] := s;    //  запись всех строк в массив чтобы потом не обращаться к файлу а работать с массиовм
    end;


  for z:=1 to maxLengthSting do  //цикл где записываем вертикальную строку в горизонтальную
    begin
      s :='';
      for m:=1 to k do
        begin
          s := s + strHorisontalArr[m][z];
        end;
      getMaxNummHorisontal(s,maxHorisont);  // отправляем получившуюся строку на проверку
    end;
  writeln(maxHorisont);
  readln();
end.  

vedro-compota's picture

решение засчитано

_____________
матфак вгу и остальная классика =)