Задание 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, особенно в плане функционального стиля программирования.