Задания
Версия для печати и копирования в MS Word

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

Для вы­пол­не­ния этого за­да­ния сле­ду­ет на­пи­сать про­грам­му. Ниже при­ведён файл, ко­то­рый не­об­хо­ди­мо об­ра­бо­тать с по­мо­щью дан­но­го ал­го­рит­ма.

За­да­ние 24

Спрятать решение

Ре­ше­ние.

При­ведём ре­ше­ние Ни­ко­лая Чур­ки­на (Ти­ма­шевск) на языке Python.

f = open('24.txt').readline()

k = 1

m = 0

for i in range(len(f)-1):

if f[i] != f[i+1]:

k += 1

m = max(m, k)

else:

k = 1

print(m)

В ре­зуль­та­те ра­бо­ты дан­но­го ал­го­рит­ма при вводе дан­ных из файла в усло­вии по­лу­ча­ем ответ  — 45.

 

Ответ: 45.

 

При­ме­ча­ние. Путь к файлу не­об­хо­ди­мо ука­зать со­глас­но рас­по­ло­же­нию файла на Вашем ком­пью­те­ре.

 

При­ведём ре­ше­ние Ильи Ан­дри­а­но­ва на языке Python.

s = open('zadanie24_2.txt').readline()

while 'DD' in s or 'RR' in s or 'LL' in s:

s = s.replace('DD', 'D D').replace('RR', 'R R').replace('LL', 'L L')

print(max([len(x) for x in s.split()]))

 

При­ведём ре­ше­ние Ивана Но­ви­ко­ва на языке Python.

a = open('zadanie24_2.txt').readline()

m = 0

x = 'LL RR DD'

for x1 in x.split():

while x1 in a:a = a.replace(x1 , f'{x[0]} {x[1]}')

for b in a.split():

m = max(len(b) , m)

print(m)

 

При­ведём дру­гое ре­ше­ние дан­ной за­да­чи на языке Pascal.

Для ре­ше­ния дан­ной за­да­чи будем по­сим­воль­но счи­ты­вать тек­сто­вый файл. Объ­явим пе­ре­мен­ные: maxLen  — мак­си­маль­ная длина по­сле­до­ва­тель­но­сти, curLen  — вре­мен­ное хра­не­ние длины по­сле­до­ва­тель­но­сти, i  — пе­ре­мен­ная для пе­ре­бо­ра всех сим­во­лов, s  — стро­ка для ра­бо­ты с сим­во­ла­ми из файла. Ал­го­ритм будет срав­ни­вать зна­че­ние те­ку­ще­го сим­во­ла со зна­че­ни­ем преды­ду­ще­го, и если сим­во­лы будут удо­вле­тво­рять нуж­ным усло­ви­ям, то зна­че­ние счет­чи­ка будет уве­ли­чи­вать­ся на 1.

 

При­ведём ре­ше­ние дан­ной за­да­чи на языке Pascal.

var maxLen, curLen, i: integer;

s: string;

begin

assign(input, '24.txt');

readln(s);

maxLen := 1;

curLen := 1;

for i:=2 to Length(s) do

if s[i] <> s[i-1] then begin

curLen := curLen + 1;

if curLen > maxLen then

maxLen := curLen;

end

else

curLen := 1;

writeln(maxLen);

end.

Раздел кодификатора ФИПИ: