Задача 4 Урок 19

Задача 4 Урок 19

Дан текстовый файл, в котором с в ASCII-стиле нарисованы цепочки из цифр, которые связаны по горизонтали и вертикали.
Все цепочки составляют одно дерево, которое устроено так:
всегда есть общий корень и это цифра
по горизонтали цепочка не разрывается пробелами, соединяется же с помощью последовательностей знака - (тире).
по вертикали цепочка не разрывается переносом строк, соединяется же с помощью вертикальных последовательностей символа | (вертикального разделителя).
Размер схемы не более чем 100 на 100 символов.
Задача: вывести длина самой длинной цепочки.

var
  f1: text;
  fileName, s, baseStr: string;
  maxLen: integer;
  flag: boolean;

function count_num(str: string; start, stop: integer): integer; //подсчет количества цифр во фрагменте строки
var
  k: integer;
begin
  k := 0;
  while(start <= stop) do
  begin
     if ((str[start] >= '0') AND (str[start] <= '9')) then
       k += 1;
     start += 1;
  end;
  result := k;
end;

procedure get_max(str, base: string; var max: integer); //находим самую длинную цепочку
var
  i, currLen, // длина текущей цепочки
  endBase: integer;// конец фрагмента базовой строки, на котором цепочка идет вниз
begin
  i := 1;
  while(i <= length(str)) do
  begin
    if(str[i] = '-') then
    begin
      endBase := i - 1;
      currLen := count_num(str, i, length(str)) + count_num(base, 1, endBase); // длина текущей строки + длина корня
      if(currLen > max) then
        max := currLen;
      break;
    end;
    i += 1;
  end;
end;

begin

  fileName := 'D:\User\Pascal\lesson18\task_4\input.txt';
  assign(f1, fileName);
  reset(f1);

  flag := true;

  while(NOT eof(f1)) do
  begin
    readln(f1, s);

    if(flag) then
    begin
      baseStr := s;
      maxLen := count_num(s, 1, length(s));
      flag := false;
    end
    else
      get_max(s, baseStr, maxLen);

    writeln(s);
  end;

  writeln();
  writeln('Maksimalnaya dlina: ', maxLen);

  readln();

end.