Задания
Версия для печати и копирования в MS Word
Тип 24 № 61404
i

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

За­да­ние 24

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

Ре­ше­ние.

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

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

f = f.replace('X','X ').replace('Y','Y ').split(' ')

maxi = 0

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

c = f[i] + f[i+1]+ f[i+2][:-1]

if c.count('X') == 1 and c.count('Y') == 1:

maxi= max(maxi, len(c))

c = f[-3] + f[-2]+ f[-1]

if c.count('X') == 1 and c.count('Y') == 1:

maxi= max(maxi, len(c))

print(maxi)

 

Ответ: 224.

 

 

 

При­ведём ре­ше­ние Ге­ор­гия Востри­ко­ва на языке Python.

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

X = [0,0] #пер­вое зна­че­ние по­ка­зы­ва­ет встре­ча­лось ли X, вто­рое зна­че­ние - по­зи­ция по­след­не­го X

Y = [0,0] #пер­вое зна­че­ние по­ка­зы­ва­ет встре­ча­лось ли Y, вто­рое зна­че­ние - по­зи­ция по­след­не­го Y

count = 0

maxi = 0

for i in range(len(f)):

if f[i] == 'X':

if X[0] == 0: #если встре­ти­ли X пер­вый раз

X = [1,i] # вы­став­ля­ем флаг X в со­сто­я­ние 1 и за­по­ми­на­ем по­зи­цию А

else: #если встре­ти­ли X вто­рой раз

if X[1] > Y[1]:#если преды­ду­щее X идёт после преды­ду­ще­го Y, то преды­ду­щее Y не вхо­дит в новую це­поч­ку

Y = [0,0]#«за­бы­ва­ем» преды­ду­щее Y

maxi = max(maxi,count) #об­нов­ля­ем мак­си­мум

count = i - X[1] - 1 #вы­чис­ля­ем длину на­ча­ла новой це­поч­ки(с по­зи­ции преды­ду­ще­го X, до те­ку­ще­го X)

X[1] = i#за­по­ми­на­ем по­зи­цию но­во­го X

else:#если преды­ду­щее X идёт до преды­ду­ще­го Y, то преды­ду­щее Y вхо­дит в новую це­поч­ку и его зна­че­ния оста­ют­ся

maxi = max(maxi,count)

count = i - X[1] - 1

X[1] = i

elif f[i] == 'Y': #всё то же самое что до этого, толь­ко для Y

if Y[0] == 0:

Y = [1,i]

else:

if Y[1] > X[1]:

X = [0,0]

maxi = max(maxi,count)

count = i - Y[1] - 1

Y[1] = i

else:

maxi = max(maxi,count)

count = i - Y[1] - 1

Y[1] = i

count += 1 #уве­ли­чи­ва­ем число сим­во­лов в це­поч­ке

print(maxi)

 

 

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

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

maxi=0

f=f.split('X')

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

if (f[i].count('Y')==1 and f[i+1].count('Y')==0) or (f[i].count('Y')==0 and f[i+1].count('Y')==1):

maxi=max(len(f[i])+len(f[i+1])+1,maxi)

elif (f[i].count('Y')==1 and f[i+1].count('Y')==1):

maxi=max(len(f[i])+1,maxi)

maxi = max(len(f[i+1]) + 1, maxi)

elif f[i].count('Y')>1 and f[i+1].count('Y')>1:

maxi=max((len(f[i])-f[i].rindex('Y')-1)+1+(len(f[i+1])-f[i].index('Y')-1),maxi)

print(maxi)

 

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

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

ndx = [-1]+[i for i in range(len(s)) if s[i] in 'XY']+[len(s)]

print(max([ndx[i+3]-ndx[i]-1 for i in range(len(ndx)-3) if s[ndx[i+1]]!=s[ndx[i+2]]]))


Аналоги к заданию № 61370: 61404 Все