Задача 6904. Источник: Поляков. Задание КИМ 24
(П. Финкель) Текстовый файл 24-277.txt состоит не более чем из 106 символов и содержит только заглавные буквы латинского алфавита и десятичные цифры. Определите максимальную длину последовательности гласных букв, которая ограничена по краям одинаковыми нечётными цифрами.
Решение
Возможности языка Python позволяют создать очень короткое решение. Разделим строку из файла по каждой нечетной цифре. Отфильтруем строки, содержащие только гласные буквы и найдем длину каждой из них. Из полученных значений найдем максимальное.
Python короткое решение
s = open('24-277.txt').readline()
mx = 0
for i in '13579':
mx = max(mx, *[len(x) for x in s.split(i) if len(set(x) - set('AEIOUY')) == 0])
print(mx)
При использовании сложного списочного выражения можно написать еще более короткое однострочное решение.
Python короткое решение в одну строку
print(max([len(s) for i in '13579' for s in open('24-277.txt').readline().split(i) if len(set(s) - set('AEIOUY')) == 0]))
Классическое решение с посимвольной обработкой можно реализовать на любом языке программирования. В цикле подсчитываем длину непрерывной цепочки гласных букв. Встретив нечетную цифру, сравниваем ее с предыдущей встреченной нечетной цифрой перед непрерывной цепочкой гласных. Если они совпадают, сравниваем длину найденной цепочки с максимальной.
Python универсальное решение
s = open('24-277.txt').readline()
k = 0
mx = 0
last = ''
for i in s:
if i in '13579':
if i == last:
mx = max(mx, k)
k = 0;
last = i
elif i in 'AEIOUY':
k+= 1
else:
k = 0
last = ''
print(mx)
PascalABC универсальное решение
var
k, max, i: Integer;
s: String;
last: Char;
f: TEXT;
begin
Assign(f, '24-277.txt');
Reset(f);
Readln(f, s);
k := 0;
max := 0;
last := ' ';
for i := 1 to s.Length do
begin
if '13579'.IndexOf(s[i]) <> -1 then
begin
if (s[i] = last) and (k > max) then
max := k;
k := 0;
last := s[i];
end
else if 'AEIOUY'.IndexOf(s[i]) <> -1 then
k := k + 1
else
begin
k := 0;
last := ' ';
end;
end;
Writeln(max);
end.
C++ универсальное решение
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream f;
f.open("24-277.txt");
string s;
f >> s;
int k = 0, max = 0;
string s1 = "13579", s2 = "AEIOUY";
char last = ' ';
for (int i = 0; i < s.length(); i++)
{
if (s1.find(s[i]) != -1)
{
if (s[i] == last && k > max)
max = k;
k = 0;
last = s[i];
}
else if (s2.find(s[i]) != -1)
k++;
else
{
k = 0;
last = ' ';
}
}
cout << max << endl;
}
Ответ
456