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

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

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

Примеры:
1------4--------------5-------6--------7
| |
| |-------5---------8
|
|-------6--------7--7-------9------8---1----5---3
Ответ: 10
1------4------8--------5-------6--------7
| | |
| | |-------5---------8
| |
| |--------8-8-8---8----8
|
|-------6--------7--7
|--------------5-5--5--5
Ответ: 8

program lesson18_4;
type
    intArr = array[1..100] of integer;
    strArr = array[1..30] of string;

procedure fillArr(var sArr: strArr; k: integer);
var
    i, j: integer;
begin
    for i := low(sArr) to k do
        for j := low(sArr[i]) to length(sArr[i]) do
            if (sArr[i][j] = ' ') or (sArr[i][j] = '|') then
                sArr[i][j] := sArr[i - 1][j];
end;

function getCount(s: string): integer;
var
    str: string = '';
    b: boolean;
    i, count: integer;
begin
    count := 0;
    for i := low(s) to length(s) do
    begin
        if (s[i] >= '0') and (s[i] <= '9') then
        begin
            str := str + s[i];
            b := false;
        end else
            b := true;

        if (str <> '') and (b or (i = length(s))) then
        begin
            count := count + 1;
            str := '';
		end;
	end;
	result := count;
end;

function max(a: intArr): integer;
var
    m, i: integer;
begin
    m := 0;
    for i := low(a) to high(a) do
        if a[i] > m then
            m := a[i];
    result := m;
end;

var
    sArr: strArr;
    iArr: intArr;
    f1: text;
    filename: string;
    i, k: integer;
begin
    filename := 'D:\Pascal\Uroc18\text2.txt';
    assign(f1, filename);
    reset(f1);

    k := 0;
    while not eof(f1) do
    begin
        k := k + 1;
        readln(f1, sArr[k]);
    end;

    fillArr(sArr, k);

    for i := low(sArr) to k do
        iArr[i] := getCount(sArr[i]);

    writeln('max = ', max(iArr));
    readln();
end.
vedro-compota's picture

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

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