Задание 24

Последовательности (цепочки) символов

24_1: Демоверсия варианта ЕГЭ по информатике 2021, ФИПИ:
  

Задание выполняется с использованием прилагаемых файлов

 
Текстовый файл состоит не более чем из 106 символов X, Y и Z.
Определите максимальное количество идущих подряд символов, среди которых каждые два соседних различны.

Для выполнения этого задания следует написать программу.


Ответ: 35

    Паскаль:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    var
      f: text;
      i, k, max: integer;
      s: string;
     
    begin
      assign(f, 'D:\24.txt');
      reset(f);
      readln(f, s);
      max := 1;
      k := 1; // кол-во подряд идущих
      for i := 2 to length(s) do
      begin
        if s[i] <> s[i - 1] then
        begin
          inc(k);
          if k > max then max := k;
        end
        else k := 1;
      end;
      write(max)
    end.

    Python:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    f=open('D:/24.txt')
    s=f.readline()
    m=1
    k=1
    for i in range(1,len(s)):
        if s[i]!=s[i-1]:
            k+=1
            m=max(k,m)
        else:
            k=1
    print(m)



24_2:
  

Задание выполняется с использованием прилагаемых файлов

 
В текстовом файле (выше по ссылке) находится цепочка из символов латинского алфавита ABC.

Найдите длину самой длинной подцепочки, состоящей из символов C.


Ответ: 0


    PascalABC.net:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    begin
      assign(input, 'k7-0.txt');
      var s: string;
      var c: string;
      read(s);
      c := 'C';
      while c in s do
        c := c + 'C';
      print(length(c) - 1)
    end.

    Python:
    способ 1:

    1
    2
    3
    4
    5
    6
    7
    8
    
    with open("k7-0.txt") as Fin:
      s = Fin.readline()
     
    c = 'C'
    while c in s: # ищем CC, потом CCC и т.д
      c += 'C'
    print(len(c)-1 )
    # минус 1, чтобы убрать лишнюю (последнюю добавленную С)

    способ 2:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    f=open('k7-0.txt')
    s = f.readline() # считали строку
    m = 0 # макс длина цепочки
    l = 0 # начальная длина цепочки
    for i in range(0,len(s)):
        if s[i]=='C':
            l+=1
            m = max(l,m) # перезаписали Макс длину
        else:
            l = 0 #  сбрасываем счетчик
    print(m)

24_3:
  

Задание выполняется с использованием прилагаемых файлов

 
В текстовом файле (выше по ссылке) находится цепочка из символов латинского алфавита A, B, C, D, E.

Найдите длину самой длинной подцепочки, состоящей из символов AB или C (в произвольном порядке).

Ответ: 16


    PascalABC.net:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    begin
      assign(input, 'k7a-1.txt');
      var s: string;
      read(s);
      var k := 0;
      var maxim := 0;
      for var i := 1 to length(s) do
        if s[i] in 'ABC' then
        begin
          k += 1;
          if k > maxim then maxim := k
        end
        else k := 0 ;
      write(maxim)
    end.

    Python:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    f = open('k7a-1.txt')
    s = f.readline() # считали строку
    m = 0 # макс длина цепочки из "A,B,С"
    l = 0 # начальная длина цепочки из "A,B,С"
    for i in range(0,len(s)):
        if s[i] in'ABC':
            l+=1
            m = max(l,m) # перезаписали Макс длину
        else:
            l = 0 # другая буква - сбрасываем счетчик
    print(m)

24_4:
  

Задание выполняется с использованием прилагаемых файлов

 
В текстовом файле (по ссылке выше) находится цепочка из символов латинского алфавита A, B, C, D, E, F.

Найдите длину самой длинной подцепочкине содержащей гласных букв.

Ответ: 20


    PascalABC.net:
    Вариант 1:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    begin
      assign(input, 'k7a-6.txt');
      var s: string;
      read(s);
      var k := 0;
      var maxim := 0;
      for var i := 1 to length(s) do
        if s[i] in 'BCDF' then
        begin
          k += 1;
          if k > maxim then maxim := k
        end
        else k := 0 ;
      write(maxim)
    end.

    Вариант 2:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    begin
      var s := readAllText('d:\k7a-6.txt').Trim;
      var (k, max) := (0, 0);
      foreach var c in s do 
        if not (c in 'AE') then
        begin
          k += 1;
          if k > max then max := k;
        end else
          k := 0;
      print(max)
    end.

    Python:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    with open("k7a-6.txt") as F:
      s = F.readline() # считали строку
     
    k = 0 # начальная длина цепочки из "B,C,D,F"
    Max = 0 # макс длина цепочки из "B,C,D,F"
    for c in s:
      if c in 'BCDF':
        k += 1
        if k > Max:
          Max = k # перезаписали Макс длину
      else:
          k = 0 # другая буква - сбрасываем счетчик
    print(Max)

24_5:
  

Задание выполняется с использованием прилагаемых файлов

 
В текстовом файле (по ссылке выше) находится цепочка из символов латинского алфавита A, B, C, D, E.

Найдите максимальную длину цепочки вида EABEABEABE… (состоящей из фрагментов EAB, последний фрагмент может быть неполным).

Ответ: 7
✍ Решение:

    PascalABC.net:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    begin
      assign(input, 'k7b-1.txt');
      var s: string;
      read(s);
      var c := 'EAB';
      while c in s do
      begin
        if c[length(c)] = 'B' then
          c += 'E'
        else if c[length(c)] = 'A' then
          c += 'B'
        else if c[length(c)] = 'E' then
          c += 'A';
      end;
      print(length(c) - 1)
    end.

    Python:
    Способ 1:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    with open("k7b-1.txt") as Fin:
      s = Fin.readline()
     
    c = 'EAB'
    while c in s: # ищем EAB, потом EABE и т.д
        if c[-1]=="B": c +="E"
        elif c[-1]=="A": c +="B"
        elif c[-1]=="E": c +="A"
    print(len(c)-1)
    Постоянно повторяется фрагмент EAB, поэтому возможны 3 варианта окончания строки:

  • 1 тип = ..EABE — неполный последний фрагмент
  • 2 тип = ..EABEB — неполный последний фрагмент
  • 3 тип = ..EAB — полный последний фрагмент
  • Способ 2:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    f=open('k7b-1.txt')
    s = f.readline()
    m = 0
    i = 0
    for char in s:
        if (char == 'E' and i%3 == 0) or \
           (char == 'A' and i%3 == 1) or \
           (char == 'B'and i%3 == 2): 
            i += 1
            m = max(i,m)
        elif char == 'E':
            i = 1
        else:
            i = 0
    print(m)

24_6:
  

Задание выполняется с использованием прилагаемых файлов

 
В текстовом файле (по ссылке выше) находится цепочка из символов латинского алфавита A, B, C, D, E.
Найдите количество цепочек длины 3, удовлетворяющих следующим условиям:

  • 1-й символ – один из символов BC или D;
  • 2-й символ – один из символов B, D, E, который не совпадает с первым;
  • 3-й символ – один из символов B, C, E, который не совпадает со вторым.


  • Ответ: 1280

    Комментарии