Задание 24

    Задание 24 (демо-2023). Текстовый файл состоит из символов A, C, D, F и O. Определите максимальное количество идущих подряд пар символов вида согласная + гласная в прилагаемом файле. Для выполнения этого задания следует написать программу.

    Решение задания представлено ниже.

PascalABC.NET

##

var F:=ReadAllText('24.txt');

 

foreach var (a,b) in 'CDF'.Cartesian('AO') do

  F:=F.Replace(a+b,'*');

foreach var s in 'ACDFO' do

  F:=F.Replace(s,' ');

F.Split.Max(x->x.length).print;

Python

from itertools import product

f=open('24.txt','r').read()

 

for a,b in product('CDF','AO'):

     f=f.replace(a+b,'*')

for s in 'ACDFO':

     f=f.replace(s,' ')

m=max(list(map(len,f.split())))

print(m)

 

    Данное задание можно решать разными способами, мы воспользуемся следующим алгоритмом: в строке заменим все комбинации букв согласная+гласная из данных букв, допустим, на символ звёздочки *, затем все оставшиеся буквы заменим пробелами и найдём максимальную длину идущих подряд символов звёздочек.

    Рассмотрим решение на языке PascalABC.NET. Считываем весь файл в строку функцией ReadAllText. В первом цикле будем пробегать все пары (a,b) букв согласная+гласная, полученные декартовым произведением строки 'CDF' и строки 'AO' с помощью функции Cartesian, и будем заменять каждую пару a+b на звёздочку * функцией Replace(a+b,'*'). Во втором цикле каждую букву из строки 'ACDFO'заменим на пробел функцией Replace(s,' '). Далее последовательно применим к строке F методы Split() (разделение строки по пробелам), Max(x->x.length) (лямбда-выражение заменяет каждую строку на её длину и функция Max находит максимальную длину), Print (вывод числа на экран).

    На языке Python решение похоже на решение в PascalABC.NET. Отличается лишь чтение из файла (функция open() и read()), формирование декартова произведения (функция product('CDF','AO')), и определение максимальной длины последовательности звёздочек (конструкция max(list(map(len,f.split())))).

    Данное решение ещё раз показывает, что язык PascalABC.NET не уступает языку Python по своим возможностям. Наоборот, в некоторых моментах конструкции PascalABC.NET оказываются более доступными для понимания и написания, чем на языке Python, особенно в плане функционального стиля программирования.


Последнее изменение: Понедельник, 22 мая 2023, 19:22