Главная страница
Навигация по странице:

  • Язык

  • егэ. Задача 1б. В текстовом файле находится цепочка из символов латинского алфавита X, Y, z длиной не более 10 6


    Скачать 324.31 Kb.
    НазваниеЗадача 1б. В текстовом файле находится цепочка из символов латинского алфавита X, Y, z длиной не более 10 6
    Дата16.12.2022
    Размер324.31 Kb.
    Формат файлаpdf
    Имя файлаdoc163316419_640376290.pdf
    ТипЗадача
    #847679

    Задание 24
    Обработка строк

    Чтение из файла (Python)
    #однострочный файл f = open(“24.txt”)
    s = f.readline()

    f.close()
    #многострочный файл f = open(“24.txt”)
    for s in f:

    f.close()

    Чтение из файла (Pascal)
    //однострочный файл var f:text;
    s:string;
    begin assign(f,’24.txt’);
    reset(f);
    readln(f, s);

    close(f);
    end.

    Чтение из файла (Pascal)
    //многострочный файл var f:text;
    s:string;
    begin assign(f,’24.txt’);
    reset(f);
    while not eof(f) do begin readln(f, s);

    end;
    close(f);
    end.

    Поиск максимальной подстроки
    Задача 1а. В текстовом файле находится цепочка из символов латинского алфавита A, B, C длиной не более 10 6
    символов. Найдите длину самой длинной подцепочки, состоящей из символов C.
    Источник: kpolyakov.spb.ru

    Описание решения
    Начальные значения:
    curr = 0
    #длина текущей цепочки maxS = 0
    #длина максимальной цепочки
    Циклом проходим все символы в строке, для каждого символа проверяем:
    - Если это символ C, то увеличиваем длину текущей цепочки на один, сравниваем её с длиной максимальной цепочки.
    - Если это другой символ, то длина текущей цепочки сбрасывается к начальному значению.
    var f : text;
    s : string;
    i, curr, maxS : integer;
    begin assign(f,“24.txt”);
    reset(f);
    readln(f, s);
    curr:=0; maxS:=0;
    for i:=1 to length(s) do begin if s[i]=“C” then begin curr:=curr+1;
    if curr>maxS then maxS:=curr;
    end else curr:=0;
    end;
    writeln(maxS);
    close(f);
    end.
    Язык: Pascal
    f = open(“24.txt”)
    s = f.readline()
    curr, maxS = 0, 0
    for i in range(len(s)):
    if s[i]==“C”:
    curr+=1
    maxS = max(curr, maxS)
    else:
    curr = 0
    print(maxS)
    f.close()
    Язык: Python

    Поиск максимальной подстроки
    Задача 1б. В текстовом файле находится цепочка из символов латинского алфавита X, Y, Z длиной не более 10 6
    символов. Найдите максимальное количество идущих подряд символов,
    среди которых нет символов Z.
    Источник: Апробация 19.11.2020

    Описание решения
    Начальные значения:
    curr = 0
    #длина текущей цепочки maxS = 0
    #длина максимальной цепочки
    Циклом проходим все символы в строке, для каждого символа проверяем:
    - Если это не символ Z, то увеличиваем длину текущей цепочки на один, сравниваем её с длиной максимальной цепочки.
    - Если это символ Z, то длина текущей цепочки сбрасывается к начальному значению.
    var f : text;
    s : string;
    i, curr, maxS : integer;
    begin assign(f,“24.txt”);
    reset(f);
    readln(f, s);
    curr:=0; maxS:=0;
    for i:=1 to length(s) do begin if s[i]<>“Z” then begin curr:=curr+1;
    if curr>maxS then maxS:=curr;
    end else curr:=0;
    end;
    writeln(maxS);
    close(f);
    end.
    Язык: Pascal
    f = open(“24.txt”)
    s = f.readline()
    curr, maxS = 0, 0
    for i in range(len(s)):
    if s[i]!=“Z”:
    curr+=1
    maxS = max(curr, maxS)
    else:
    curr = 0
    print(maxS)
    f.close()
    Язык: Python

    Поиск максимальной подстроки
    Задача 2. Текстовый файл состоит не более чем из
    10 6
    символов
    X,
    Y
    и
    Z.
    Определите максимальное количество идущих подряд символов, среди которых каждые два соседних различны.
    Источник: Демоверсия 2021

    Описание решения
    Начальные значения:
    В качестве начального эталона берём первый символ!
    curr = 1
    #длина текущей цепочки maxS = 1
    #длина максимальной цепочки
    Циклом проходим все символы в строке, начиная со второго, для каждого символа проверяем:
    - Если это символ отличается от предыдущего, то увеличиваем длину текущей цепочки на один,
    сравниваем её с длиной максимальной цепочки.
    - Если символы совпадают, то длина текущей цепочки сбрасывается к начальному значению.
    var f : text;
    s : string;
    i, curr, maxS : integer;
    begin assign(f,“24.txt”);
    reset(f);
    readln(f, s);
    curr:=1; maxS:=1;
    for i:=2 to length(s) do begin if s[i]<>s[i-1] then begin curr:=curr+1;
    if curr>maxS then maxS:=curr;
    end else curr:=1;
    end;
    writeln(maxS);
    close(f);
    end.
    Язык: Pascal
    f = open(“24.txt”)
    s = f.readline()
    curr, maxS = 1, 1
    for i in range(1, len(s)):
    if s[i]!=s[i-1]:
    curr+=1
    maxS = max(curr, maxS)
    else:
    curr = 1
    print(maxS)
    f.close()
    Язык: Python

    Поиск максимальной подстроки
    Задача
    3.
    (А.М.
    Кабанов)
    В текстовом файле находится цепочка из символов латинского алфавита A,
    B, C, D, E. Найдите максимальную длину цепочки вида
    EABEABEABE...
    (составленной из фрагментов
    EAB,
    последний фрагмент может быть неполным).
    Источник: kpolyakov.spb.ru

    Описание решения
    Паттерн (шаблон) строки
    Буква E подходит, если текущая длина строки 0, 3, 6…
    Буква A подходит, если текущая длина строки 1, 4, 7…
    Буква B подходит, если текущая длина строки 2, 5, 8…
    Видно,
    что каждому символу соответствует определённый остаток от деления на 3.

    Описание решения
    Начальные значения:
    curr = 0
    #длина текущей цепочки maxS = 0
    #длина максимальной цепочки
    Циклом проходим все символы в строке, для каждого символа проверяем:
    - Если это символ подходит под паттерн,
    то увеличиваем длину текущей цепочки на один,
    сравниваем её с длиной максимальной цепочки.
    - Если символ не подходит, но это буква E, то длина текущей цепочки равна 1.
    - В
    противном случае длина текущей цепочки сбрасывается к начальному значению.
    var f : text;
    s : string;
    i, curr, maxS : integer;
    begin assign(f,“24.txt”);
    reset(f);
    readln(f, s);
    curr:=0; maxS:=0;
    for i:=1 to length(s) do begin if (s[i]=“E”) and (curr mod 3 = 0) or
    (s[i]=“A”) and (curr mod 3 = 1) or
    (s[i]=“B”) and (curr mod 3 = 2) then begin curr:=curr+1;
    if curr>maxS then maxS:=curr;
    end else if s[i]=“E” then curr:=1
    else curr:=0;
    end;
    writeln(maxS);
    close(f);
    end.
    Язык: Pascal
    f = open(“24.txt”)
    s = f.readline()
    curr, maxS = 0, 0
    for i in range(len(s)):
    if (s[i]==“E” and curr%3==0) or
    (s[i]==“A” and curr%3==1) or
    (s[i]==“B” and curr%3==2):
    curr+=1
    maxS = max(curr, maxS)
    elif s[i]==“E”:
    curr = 1
    else:
    curr = 0
    print(maxS)
    f.close()
    Язык: Python

    Поиск максимальной подстроки
    Задача 4. В текстовом файле находится цепочка из не более чем 10 6
    символов, в которую могут входить заглавные буквы латинского алфавита
    A…Z
    и десятичные цифры. Найдите длину самой длинной подцепочки, состоящей из одинаковых символов.
    Выведите сначала символ, из которого строится цепочка, а затем через пробел – длину этой цепочки.
    Если таких цепочек (максимальной длины) несколько,
    выведите информацию о
    первой встретившейся цепочке.
    Источник: kpolyakov.spb.ru

    Описание решения
    Начальные значения:
    В качестве начального эталона берём первый символ!
    curr = 1
    #длина текущей подстроки maxS = 1
    #длина максимальной подстроки maxch = s[0]
    #символ максимальной подстроки
    Циклом проходим все символы в строке, начиная со второго, для каждого символа проверяем:
    - Если это символ совпадает с
    предыдущим,
    то увеличиваем длину текущей цепочки на один, сравниваем её с длиной максимальной цепочки.
    - Если текущая цепочка самая большая, то сохраняется и её длина и символ из которого она состоит.
    - Если символы совпадают, то длина текущей цепочки сбрасывается к начальному значению.
    var f : text;
    s : string;
    i, curr, maxS : integer;
    maxch : char;
    begin assign(f,“24.txt”);
    reset(f);
    readln(f, s);
    curr:=1; maxS:=1; maxch:=s[1];
    for i:=2 to length(s) do begin if s[i]=s[i-1] then begin curr:=curr+1;
    if curr>maxS then begin maxS:=curr;
    maxch:=s[i];
    end;
    end else curr:=1;
    end;
    writeln(maxch, maxS);
    close(f);
    end.
    Язык: Pascal
    f = open(“24.txt”)
    s = f.readline()
    curr, maxS, maxch = 1, 1, s[0]
    for i in range(1, len(s)):
    if s[i]==s[i-1]:
    curr+=1
    if curr>maxS:
    maxS = curr maxch = s[i]
    else:
    curr = 1
    print(maxch, maxS)
    f.close()
    Язык: Python

    Поиск максимальной подстроки
    Задача 5. (П.Е. Финкель) Текстовый файл состоит не более чем из 10 6
    символов - заглавных латинских букв и
    цифр.
    Числом назовём непрерывную последовательность цифр, слева и справа от которой строят буквы. Определите максимальное нечётное число, записанное в этом файле.
    Источник: kpolyakov.spb.ru

    Описание решения
    В данной задаче цепочки необходимо проверять только в конце!
    Для корректной проверки рекомендуется в конец строки добавить неподходящий символ!
    Начальные значения:
    curr = ‘’
    #текущая подстрока n = 0
    #значение очередного числа из строки maxN = 0
    #значение максимального нечётного числа
    Циклом проходим все символы в строке, для каждого символа проверяем:
    - Если символ относится к цифрам, то прибавляем его к текущей цепочке.
    - Если символ относится к буквам, то числовое значение цепочки
    (если она существует)
    сравниваем с
    максимальным нечётным числом, затем текущая цепочка становится пустой.
    var f : text;
    s, curr : string;
    i, n, maxN : integer;
    begin assign(f,'24.txt');
    reset(f);
    readln(f, s);
    s:=s+'A';
    curr:=''; maxN:=0;
    for i:=1 to length(s) do begin if ('0'<=s[i]) and (s[i]<='9') then curr:=curr+s[i];
    else if curr<>‘’ then begin n:= strtoint(curr);
    if (n mod 2 <> 0) and (n>maxN) then maxN:=n;
    curr:='';
    end;
    end;
    writeln(maxN);
    close(f);
    end.
    Язык: Pascal
    f = open('24.txt')
    s = f.readline() + 'A'
    curr, maxN = '', 0
    for i in range(len(s)):
    if '0'<=s[i]<='9':
    curr = curr + s[i]
    elif curr!='':
    n = int(curr)
    if n%2!=0 and n > maxN: maxN=n curr=‘’
    print(maxN);
    f.close()
    Язык: Python

    Поиск количества подстрок
    Задача 6. (Е. Джобс) Текстовый файл состоит не более чем из 10 6
    символов S, T, O, C, K. Сколько раз встречается в файле комбинация «KOT»?
    Источник: kompege.ru

    Описание решения
    Начальные значения:
    k = 0
    #количество комбинаций KOT
    Циклом проходим все цепочки с длиной 3. Примем, что переменная i будет хранить номер первого элемента в тройке, то есть, будем рассматривать тройки (s[i],
    s[i+1], s[i+2]).
    Если цепочка подходит под условие, то переменная количества увеличивается на единицу.
    var f : text;
    s : string;
    i, k : integer;
    begin assign(f,“24.txt”);
    reset(f);
    readln(f, s);
    k:=0;
    for i:=1 to length(s)-2 do if s[i]+s[i+1]+s[i+2]=“KOT” then k:=k+1;
    writeln(k);
    close(f);
    end.
    Язык: Pascal
    f = open(“24.txt”)
    s = f.readline()
    k = 0
    for i in range(len(s)-2):
    if s[i]+s[i+1]+s[i+2]==‘KOT’:
    k+=1
    print(k)
    f.close()
    Язык: Python

    Поиск количества подстрок
    Задача 7. (Е. Джобс) Текстовый файл состоит не более чем из 10 6
    символов S, T, O, C, K. Сколько раз встречается комбинация «OCK», не являющаяся при этом частью комбинации «STOCK».
    Источник: kompege.ru

    Описание решения
    Начальные значения:
    k = 0
    #количество комбинаций OCK
    k1 = 0
    #количество комбинаций STOCK
    Первым циклом проходим все цепочки с длиной 3. В
    цикле считаем количество комбинаций OCK.
    Вторым циклом проходим все цепочки с длиной 5. В
    цикле считаем количество комбинаций STOCK.
    Ответом является разность этих значений.
    var f : text;
    s : string;
    i, k, k1 : integer;
    begin assign(f,“24.txt”);
    reset(f);
    readln(f, s);
    k:=0; k1:=0;
    for i:=1 to length(s)-2 do if s[i:i+3]=“KOT” then k:=k+1;
    for i:=1 to length(s)-4 do if s[i:i+5]=“STOCK” then k1:=k1+1;
    writeln(k-k1);
    close(f);
    end.
    Язык: Pascal
    f = open(“24.txt”)
    s = f.readline()
    k, k1 = 0, 0
    for i in range(len(s)-2):
    if s[i:i+3]==‘OCK’:
    k+=1
    for i in range(len(s)-4):
    if s[i:i+5]==‘STOCK’:
    k1+=1
    print(k-k1)
    f.close()
    Язык: Python

    Поиск количества подстрок
    Задача 8. Текстовый файл состоит не более чем из 10 6
    заглавных латинских букв (A..Z). Текст разбит на строки различной длины. Определите количество строк, в которых буква J встречается чаще, чем буква E.
    Источник: kpolyakov.spb.ru

    Описание решения
    Начальные значения:
    k =0
    #количество подходящих строк kj=0
    #количество букв J в конкретной строке ke=0
    #количество букв E в конкретной строке
    Поочерёдно считываем строки из файла. Для каждой строки считаем количество букв J и E и если буква J
    встречается чаще
    E,
    то увеличиваем количество подходящих строк на 1.
    var f : text;
    s : string;
    i, k, kj, ke : integer;
    begin assign(f,“24.txt”);
    reset(f);
    k:=0;
    while not eof(f) do begin readln(f, s);
    kj:=0; ke:=0;
    for i:=1 to length(s) do begin if s[i]=“J” then kj:=kj+1;
    if s[i]=“E” then ke:=ke+1;
    end;
    if kj>ke then k:=k+1;
    end;
    writeln(k);
    close(f);
    end.
    Язык: Pascal
    f = open(“24.txt”)
    k = 0
    for s in f:
    ke, kj = 0, 0
    for i in range(len(s)):
    if s[i]==“E”: ke+=1
    if s[i]==“J”: kj+=1
    if kj>ke: k+=1
    print(k)
    f.close()
    Язык: Python

    Поиск количества подстрок
    Задача 9. Текстовый файл состоит не более чем из 10 6
    заглавных латинских букв (A..Z). Текст разбит на строки различной длины. Определите количество строк,
    в которых встречается комбинация F*O, где звёздочка обозначает любой символ.
    Источник: kpolyakov.spb.ru

    Описание решения
    Начальные значения:
    k = 0
    #количество подходящих строк good = False
    #флаг наличия F*O
    Поочерёдно считываем строки из файла. Для каждой проверяем наличие комбинации F*O, если комбинация присутствует, то увеличиваем количество подходящих строк на 1.
    var f : text;
    s : string;
    i, k : integer;
    good: boolean;
    begin assign(f,“24.txt”);
    reset(f);
    k:=0;
    while not eof(f) do begin readln(f, s);
    good:=false;
    for i:=1 to length(s)-2 do if (s[i]=“F”) and (s[i+2]=“O”) then begin good:=true;
    break;
    end;
    if good then k:=k+1;
    end;
    writeln(k);
    close(f);
    end.
    Язык: Pascal
    f = open(“24.txt”)
    k = 0
    for s in f:
    good = False for i in range(len(s)-2):
    if s[i]==“F” and s[i+2]==“O”:
    good = True break if good: k+=1
    print(k)
    f.close()
    Язык: Python

    Поиск количества подстрок
    Задача 10. Текстовый файл состоит не более чем из
    10 6
    заглавных латинских букв. Определите символ,
    который чаще всего встречается в файле сразу после буквы X. В ответе запишите сначала этот символ, а потом сразу
    (без разделителя)
    сколько раз он встретился после буквы
    X.
    Например,
    в тексте
    XBCXXBXDDD после буквы X два раза стоит B, по одному разу – X и D. Для этого текста ответом будет
    B2.
    Источник: kpolyakov.spb.ru

    Описание решения
    Для перебора символов удобно использовать цифровое представление символов в кодировке.
    ord( )
    – порядковый номер символа в кодировке chr( )
    – символ с указанным порядковым номером
    Пример: перебор заглавных латинских букв удобно делать с помощью следующего цикла:
    for i in range(ord(“A”), ord(“Z”)+1):
    c = chr(i)


    Описание решения
    Начальные значения:
    maxk = 0
    #наибольшая частота n-ого символа после X
    maxch=“”
    #самый частый символ после X
    ch = 0
    #текущий проверяемый символ k = 0
    #количество n-ого символа после X
    Поочерёдно перебираем все заглавные латинские буквы.
    Для каждой считаем сколько раз она встречается после
    X
    и сравниваем найденное количество с наибольшим значением.
    Если текущий символ встречается чаще,
    то сохраняется и количество и этот символ.
    var f : text;
    s : string;
    i, j, maxk, k : integer;
    ch, maxch: char;
    begin assign(f,“24.txt”);
    reset(f);
    readln(f, s);
    maxk:=0; maxch:=‘’;
    for i:=ord(‘A’) to ord(‘Z’) do begin k:=0; c:=chr(i);
    for j:=1 to length(s)-1 do if s[j]+s[j+1] = ‘X’+c then k:=k+1;
    if k>maxk then begin maxk:=k;
    maxch:=ch;
    end;
    end;
    writeln(maxch, maxk);
    close(f);
    end.
    Язык: Pascal
    f = open(“24.txt”)
    maxk, maxch = 0, “”
    s = f.readline()
    for i in range(ord(“A”),ord(“Z”)+1):
    k = 0
    c = chr(i)
    for j in range(len(s)-1):
    if s[j]+s[j+1]==“X”+c:
    k+=1
    if k>maxk:
    maxk, maxch = k, ch print(maxch, maxk)
    f.close()
    Язык: Python


    написать администратору сайта