Ошибка.
Попробуйте повторить позже
В файле 24.txt в первой строке находится строка s, состоящая не более чем из строчных букв английского алфавита. Во второй строке находится строка t, состоящая не более чем из строчных букв английского алфавита. В третьей строке находится строка p, состоящая не более чем из строчных букв английского алфавита. Каждая операция выглядит следующим образом: вы выбираете любой символ из строки , удаляете его из и вставляете в любую позицию строки (вы можете вставить этот символ куда захотите: в начало , в конец или между любыми двумя подряд идущими символами). Вам нужно выполнить несколько (возможно, ноль) операций так, чтобы строка стала равна строке . Вам гарантируется, что это возможно. Запишите в ответе взвешенную сумму букв, которые необходимо удалить из и вставить в .
За каждую букву добавьте к сумме , за каждую , , .
Решение на Python:
f = open(’24.txt’) ans = 0 s, t, p = f.readline(), f.readline(), f.readline() ABS = sorted(’qwertyuiopasdfghjklzxcvbnm’) a_t, a_s = [0] * 26, [0] * 26 for i in range(26): a_t[i] = t.count(ABS[i]) a_s[i] = s.count(ABS[i]) for i in range(26): ans += (a_t[i] - a_s[i]) * (i + 1) print(ans)
Ошибка.
Попробуйте повторить позже
В единственной строке файла находится строка состоящая не более чем из маленьких букв английского алфавита. Определите можно ли добавить некоторое(возможно нулевое) количество букв «a» в начало строки, чтобы строка стала палиндромом.
Напомним вам, что палиндромом называются строки, которые читаются одинаково как слева-направо, так и справа-налево.
В ответ запишите наименьшее необходимое количество букв «a», а если строку s невозможно сделать палиндромом проделывая описанную операцию — запишите в ответ .
Оптимальное решение: проверим, что вся строка не состоит только из букв «a», потому что если она состоит, то она уже является палиндромом и ответ . Иначе подсчитаем количество букв «a» стоящих в начале строки и количество букв «a» стоящих в конце строки. Если в конце строки стоит меньше букв «a», чем в начале, то добавляя буквы «a» в начало вы точно не сделаете строку палиндромом, поэтому ответ . Иначе, давайте добавим необходимое количество букв «a» в начало строки и после этого проверим, что полученная строка является палиндромом. Такое решение работает за три прохода по строке, то есть за .
Решение на C++
ifstream in("24.txt"); //Проверяем является ли строка палиндромом, никак лучше чем по определению мы //этого сделать не можем На самом деле можем при помощи полиномиальных хешей, но //поля этого файла слишком малы, чтобы писать хеши. bool ispalindrome(string s) { int n = s.size(); for (int i = 0; n - 1 - i > i; ++i) { if (s[i] != s[n - 1 - i]) { return false; } } return true; } void solve() { string s; //считываем строку in >> s; int n = s.size(); //проверим, правда ли строка s состоит только из букв ’a’, если это так, то //строка уже является палиндромом bool flag = true; for (int i = 0; i < n; ++i){ if (s[i] != ’a’) { flag = false; break; } } if (flag) { cout << "0\n"; return; } //подсчитаем количество букв ’a’ в начале и в конце строки, чтобы //подсчитать, сколько букв необходимо добавить. int cnt_l = 0; int cnt_r = 0; for (int l = 0; s[l] == ’a’; ++l) { ++cnt_l; } for (int r = n - 1; s[r] == ’a’; --r) { ++cnt_r; } //если в конце строки букв ’a’ уже меньше, то добавляя ’a’ слева мы не //сможем сделать строку палиндромом if (cnt_r < cnt_l) { cout << "-1\n"; return; } //добавим необходимое количество букв ’a’ и проверим, что действительно //получился палиндром string added = ""; for (int i = 0; i < cnt_r - cnt_l; ++i) { added += "a"; } s = added + s; cout << (ispalindrome(s) ? cnt_r - cnt_l : -1) << ’\n’; return; }
Решение на Python
f = open("24.txt") s = f.readline() if len(s) == s.count("a"): print(0) else: l, r = 0, 0 i = 0 while s[i] == "a" and i < len(s): l += 1 i += 1 i = len(s) - 1 while s[i] == "a" and i >= 0: r += 1 i -= 1 if l > r: print(-1) else: s = "a" * (r - l) + s # проверка строки на палиндромность f = True for i in range(len(s) // 2): if s[i] != s[len(s) - i - 1]: f = False if f: print(r - l) else: print(-1)
Ошибка.
Попробуйте повторить позже
Задание выполняется с использованием прилагаемых файлов
Текстовый файл состоит из символов S, R, O. Определите максимальную длину подстроки, состоящей из троек символов OSR или RSO. Искомая подстрока может включать только тройки OSR, только тройки RSO или содержать одновременно как тройки OSR, так и тройки RSO. Тройки не могут пересекаться.
Решение 1
s = open(’24.txt’).readline() s += ’--’ #мусор, чтобы циклы смогли сработать до конца строк maxim = 0 k = 0 for i in range(1, len(s), 3): if (s[i - 1] == ’R’ and s[i] == ’S’ and s[i + 1] == ’O’) or \ (s[i - 1] == ’O’ and s[i] == ’S’ and s[i + 1] == ’R’): k += 1 maxim = max(k, maxim) else: k = 0 k = 0 for i in range(2, len(s), 3): if (s[i - 1] == ’R’ and s[i] == ’S’ and s[i + 1] == ’O’) or \ (s[i - 1] == ’O’ and s[i] == ’S’ and s[i + 1] == ’R’): k += 1 maxim = max(k, maxim) else: k = 0 k = 0 for i in range(3, len(s), 3): if (s[i - 1] == ’R’ and s[i] == ’S’ and s[i + 1] == ’O’) or \ (s[i - 1] == ’O’ and s[i] == ’S’ and s[i + 1] == ’R’): k += 1 maxim = max(k, maxim) else: k = 0 print(maxim * 3)
Решение 2
f = open("Задание_24__tlln.txt").read() f = f.replace("OSR", "*").replace("RSO", "*") counter = 1 maxim = 0 for i in range(len(f) - 1): if f[i] == "*" and f[i + 1] == "*": counter += 1 maxim = max(counter, maxim) else: counter = 1 print(maxim * 3)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из символов ’(’ и ’)’. Известно, что правильная скобочная последовательность берет начало в начале файла. Вам необходимо узнать какую максимальну длину имеет правильная скобочная последовательность. Правильная скобочная последовательность - последовательность скобок, которая подчиняется нескольким правилам:
1) Последовательность начинается с открывающейся скобки
2) Каждая открывающаяся скобка имеет в пару закрывающаяся скобку
3) Количество открывающихся скобок в любой точке скобочной последовательности больше либо равно количеству закрывающихся
Примеры правильных скобочных последовательностей: , .
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_50_ДЗ". В ответе запишите длину искомой последовательности.
s = f.read()
count_left = 1
count_right = 0
for i in range(1, len(s)):
if s[i] == ’(’:
count_left += 1
else:
if count_left > count_right:
count_right += 1
else:
break
print(count_right + count_left)
Ошибка.
Попробуйте повторить позже
Текстовый файл "Задание_49_ДЗ"содержит только заглавные буквы латинского алфавита (ABC...Z). Текст разбит на строки различной длины. Необходимо найти строку, содержащую наибольшее количество пар соседних букв, которые стоят в таком же порядке как и в алфавите (например, AB, BC, CD и т.д.; в цепочке ABC две таких пары). Если таких строк несколько, надо взять ту, которая в файле встретилась раньше.
Выведите максимальное количество пар, встреченных среди всех строк, а также букву из данной строки, которая встречается чаще всего.
Пример. Исходный файл:
ZCQABA
ZALMAC
CRACUT
В этом примере в первой и второй строках по одной подходящей паре (AB и LM), в третьей таких пар нет. Берём первую строку, т.к. она раньше встречается в файле. В этой строке чаще других встречается буква А. Если бы она была не единственной, то выбрали ту букву, что раньше стоит в алфавите. В ответе для этого примера надо записать 1A.
count = 0
maxim = 0
s = ""
for i in f:
count = 0
for j in range(len(i) - 1):
if ord(i[j]) + 1 == ord(i[j + 1]):
count += 1
if count > maxim:
maxim = count
s = i
alph = sorted(list("qwertyuiopasdfghjklzxcvbnm".upper()))
a = [0] * 26
for i in range(len(alph)):
a[i] = s.count(alph[i])
print(maxim, alph[a.index(max(a))])
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из строк, каждая из которых состоит не более чем из заглавных букв латинского алфавита. В строке, содержащей не менее 150 символов найдите максимальное расстояние (разница в индексах) между двумя одинаковыми символами, между которым не повторяется этот символ. Если строк, содержащих не менее 150 символов несколько, то используйте последнюю из таковых для поиска маскимального расстояния.
Пример:
Среди данных строк нет ни одной, где количесто символов не менее 150. Если забыть про это условие (в рамках примера), то максимальное расстояние между символами во второй строке и оно равно 7.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_48_ДЗ". В ответе запишите искомое расстояние.
Решение 1
f = open(’Задание_48_ДЗ__tctn.txt’) t = ’’ for i in f: if i.count(’Z’) >= 150: t = i alf = ’QWERTYUIOPASDFGHJKLZXCVBNM’ ans = 0 for i in range(26): m = t.split(alf[i]) for j in m[1:-1]: ans = max(len(j), ans) print(ans + 1)
Решение 2
f = open("Задание_48_ДЗ.txt") maxim = 0 alph = sorted(list("qwertyuiopasdfghjklzxcvbnm".upper())) for s in f: s = s.strip() last_symbol = [-1] * 26 if s.count("Z") >= 150: maxim = 0 for i in range(len(s)): ind_sym = alph.index(s[i]) if last_symbol[ind_sym] != -1: if i - last_symbol[ind_sym] >= 2: maxim = max(i - last_symbol[ind_sym], maxim) last_symbol[ind_sym] = i print(maxim)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из строк, каждая из которых состоит не менее чем из 10 и не более чем из заглавных букв , , , . Найдите количество строк, в которых либо изначально есть 10-символьный палиндром, либо его можно получить перестановкой пары символов из данной подстроки. Например, для строки можно поменять символы и местами.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_47_ДЗ". В ответе запишите искомое количество строк.
def perest(arr): for i in range(10): for j in range(i + 1, 10): b = arr.copy() b[i], b[j] = b[j], b[i] if b == b[::-1]: return True return False n = 1000 f = open("Задание_47_ДЗ.txt") ans = 0 for i in range(n): s = f.readline() if len(s) > 9: for j in range(len(s) - 9): arr = list(s[j:j + 10]) if perest(arr): ans += 1 break print(ans)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из заглавных букв латинского алфавита. Гарантируется, что количество символов в строке четное. Вам нужно заменить некоторые латинские буквы на другие таким образом, чтобы из символов строки можно было составить палиндром. Например, для строки AVRORA можно заменить O на V или V на O, тогда из данного набора букв мы сможем составить палиндром.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_46_ДЗ". В ответе запишите минимальное количество замен, которые нужно сделать.
s = f.read()
# используем индексы буквы в таблице ASCII
# A - 65, Z - 90
ar = [0] * 100
for i in range(len(s)):
ar[ord(s[i])] += 1
# Если какой-то символ встречается нечетное число раз
# то 1 экземпляр этого символа можно поменять на другой символ,
# который тоже встречается нечетное число раз
# так как строка имеет четную длину, если найдется символ,
# который встречается
# нечетное число раз, то к нему всегда найдется пара
ans = 0
for i in range(65, 91):
if ar[i] % 2 == 1:
ans += 1
# мы получили количество символов, которые встретились
# нечетное число раз,
# мы можем поменять ровно половину из них, а другую не трогать
print(ans//2)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из строк, каждая из которых содержит не менее двух и не более чем букв латинского алфавита. Найдите количество строк палиндромов.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_45_ДЗ". В ответе запишите искомое количество.
# метод str.strip() удаляет этот символ
print(sum(1 for i in open(’Задание_45_ВЕБ.txt’)
if i.strip() == i.strip()[::-1]))
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из строк, каждая из которых содержит не менее семи и не более чем заглавных букв латинского алфавита. Найдите номер строки (нумерация с 0), которая содержит максимальное количество палиндромов из семи символов. Если таких строк несколько, то в ответе напишите номер первой встретившейся. Палиндром - последовательность символов, которая читается одинаково с двух сторон.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_44_ДЗ". В ответе запишите номер искомой строки.
maxim = 0
find_ind = -1
ind = 0
for s in f:
count = 0
for i in range(len(s) - 6):
if s[i:i+7] == s[i:i+7][::-1]:
count += 1
if count > maxim:
maxim = count
find_ind = ind
ind += 1
print(find_ind)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из заглавных букв латинского алфавита. Возрастающей последовательностью называется последовательность, элементы которой идут строго в порядке увеличения id по таблице ASCII. Найдите максимальную возрастающую последовательность символов.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_43_ДЗ". В ответе запишите длину искомой последовательности.
f = open(’Задание_43_ДЗ.txt’) s = f.read() count = 1 maxim = 0 for i in range(len(s) - 1): if s[i] < s[i + 1]: count += 1 maxim = max(maxim, count) else: count = 1 print(maxim)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из заглавных букв латинского алфавита. Локальным максимумом называется символ, id которого в таблице ASCII больше номеров предыдущего и последующего символа в строке. Будем считать, что первый и последний элемент строки не могут быть локальными максимумами. Найдите максимальное расстояние между двумя соседними локальными максимумами, расстояние в данной задаче это разность индексов.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_42_ДЗ". В ответе запишите искомое расстояние.
s = f.read()
ar = []
for i in range(1, len(s) - 1):
if s[i] > s[i + 1] and s[i] > s[i - 1]:
ar.append(i)
maxim = 0
for i in range(len(ar) - 1):
maxim = max(maxim, ar[i + 1] - ar[i])
print(maxim)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из заглавных букв латинского алфавита. Найдите последовательность максимальной длины, где символы идут в порядке «больше», «меньше», «больше», «меньше» и т.д. по таблице ASCII. Пример подходящей последовательности: .
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_41_ДЗ". В ответе запишите длину искомой последовательности.
Решение 1.
s = open("Задание_41_ДЗ__tcne.txt").read() counter = 1 fl = True # Ждем больше ans = 0 for i in range(len(s) - 1): if s[i] > s[i + 1] and fl: # Ждали больше, нашли больше counter += 1 fl = False # Ждем меньше elif s[i] < s[i + 1] and not fl: # Ждали меньше, нашли меньше counter += 1 fl = True # Ждем больше elif s[i] > s[i + 1] and not(fl): # Ждали меньше, нашли больше (получается больше больше) # Для ситуации CBAB, ждали меньше, получили больше, учитываем # вторую пару больше как начало новой последовательности, # флаг можно не менять, так как он уже ждет меньше counter = 2 elif s[i] < s[i + 1] and fl: # Ждали больше, нашли меньше # Флаг можно не менять, так как он уже ждет меньше counter = 1 else: counter = 1 ans = max(counter, ans) print(ans)
Решение 2. В данном решении надо отдельно рассмотреть последний символ глазами.
with open(’Задание_41_ДЗ.txt’) as f: text = f.read().strip() max_seq_len = 0 for i in range(len(text)): seq_len = 0 for j in range(i+1, len(text)): if (j-i) % 2 == 1 and ord(text[j]) > ord(text[j-1]) or \ (j-i) % 2 == 0 and ord(text[j]) < ord(text[j-1]): seq_len += 1 else: break max_seq_len = max(max_seq_len, seq_len) print(max_seq_len+1)
Решение 3.
with open(’Задание_41_ДЗ.txt’) as f: text = f.read().strip() + "-" seq_len = 1 max_seq_len = 0 for i in range(1, len(text) - 1, 2): if text[i - 1] > text[i] < text[i + 1] and text[i + 1] != "-": seq_len += 2 max_seq_len = max(max_seq_len, seq_len) else: if text[i - 1] > text[i]: seq_len += 1 max_seq_len = max(max_seq_len, seq_len) seq_len = 1 for i in range(2, len(text) - 1, 2): if text[i - 1] > text[i] < text[i + 1] and text[i + 1] != "-": seq_len += 2 max_seq_len = max(max_seq_len, seq_len) else: if text[i - 1] > text[i]: seq_len += 1 max_seq_len = max(max_seq_len, seq_len) seq_len = 1 print(max_seq_len)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из заглавных букв латинского алфавита. Найдите последовательность максимальной длины, которая содержит буквы строго в алфавитном порядке, т.е. .
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_40_ДЗ". В ответе запишите длину искомой последовательности.
s = f.read()
count = 1
maxim = 0
for i in range(len(s) - 1):
if ord(s[i]) == ord(s[i + 1]) - 1:
count += 1
maxim = max(maxim, count)
else:
count = 1
print(maxim)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из заглавных букв латинского алфавита. Найдите длину максимальной неубывающей подпоследовательности символов по таблице ASCII.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_39_ДЗ". В ответе запишите длину искомой подпоследовательности.
maxim = 0
count = 1
for i in range(len(f) - 1):
if (f[i] <= f[i + 1]):
count += 1
maxim = max(count, maxim)
else:
count = 1
print(maxim)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из цифр от 0 до 9. Найдите самую длинную последовательность, цифр одной четности.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_38_ДЗ". В ответе запишите длину искомой последовательности.
f = open("Задание_38_ДЗ.txt") s = f.read() maxim, counter = 0, 1 for i in range(len(s) - 1): if int(s[i]) % 2 == int(s[i + 1]) % 2: counter += 1 maxim = max(maxim, counter) else: counter = 1 print(maxim)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из символов, которые являются цифрами от 1 до 9. Вам необходимо найти количество и сумму двузначных палиндромов в данном файле. Пример для строки "11122"количество равно 3, сумма равна 44.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_37_ДЗ". В ответе запишите количество и сумму палиндромов.
count = 0
sum_pal = 0
for i in range(len(f) - 1):
if (f[i] == f[i + 1]):
count += 1
sum_pal += int(f[i] + f[i + 1])
print(count, sum_pal)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из символов, которые являются цифрами от 1 до 9. Вам необходимо найти знакопеременную сумму цифр данного выражения. Считать, что первый знак — "+". Пример для строки "1234" значение суммы равно
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_36_ДЗ". В ответе запишите значение знакопеременной суммы.
s = int(f[0])
for i in range(1, len(f)): # отказ от if
s += int(f[i]) * (i % 2 != 0) - int(f[i]) * (i % 2 == 0)
print(s)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из символов, которые являются цифрами от 1 до 9, знаками плюс, минус. Найдите подпоследовательность, состоящую из максимального количества положительных чисел. (Положительное число - число, перед которым либо нет знака, либо знак "+")
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_35_ДЗ". В ответе запишите сумму данной подпоследовательности, если подпоследовательностей с максимальным количеством положительных элементов несколько, то в ответе запишите максимальную сумму.
max_plus = 1
count_plus = 1
max_sum = int(f[0])
sum = int(f[0])
for i in range(1, len(f) - 1, 2):
if (f[i] == ’+’):
sum += int(f[i + 1])
count_plus += 1
if (count_plus > max_plus):
max_plus = count_plus
max_sum = sum
elif (count_plus == max_plus):
if (sum > max_sum):
max_sum = sum
else:
sum = 0
count_plus = 0
print(max_sum)
Ошибка.
Попробуйте повторить позже
Текстовый файл состоит не более чем из символов, которые являются цифрами от 1 до 9, знаками плюс, минус и одного знака равно. Вычислите значение выражений до и после знака равно.
Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_34_ДЗ". В ответе запишите большее из значений, если они равны, то запишите 1.
f = open(’Задание_34_ДЗ.txt’).read() s = int(f[0]) # первый символ s1 = 0 key = True for i in range(1, len(f) - 1, 2): # ходим только по знакам if key: # до знака равно if (f[i] == ’+’): s += int(f[i + 1]) elif (f[i] == ’=’): key = False s1 += int(f[i + 1]) # первый символ после знака равно else: s -= int(f[i + 1]) else: if (f[i] == ’+’): s1 += int(f[i + 1]) else: s1 -= int(f[i + 1]) print(max(s, s1) * (s != s1))