Тема 24. Программирование - Обработка символьной информации
24.04 Программирование - Обработка символьной информации
Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела программирование - обработка символьной информации
Решаем задачи

Ошибка.
Попробуйте повторить позже

Задача 1#43480

В файле 24.txt в первой строке находится строка s, состоящая не более чем из 107  строчных букв английского алфавита. Во второй строке находится строка t, состоящая не более чем из 107  строчных букв английского алфавита. В третьей строке находится строка p, состоящая не более чем из 107  строчных букв английского алфавита. Каждая операция выглядит следующим образом: вы выбираете любой символ из строки p  , удаляете его из p  и вставляете в любую позицию строки s  (вы можете вставить этот символ куда захотите: в начало s  , в конец или между любыми двумя подряд идущими символами). Вам нужно выполнить несколько (возможно, ноль) операций так, чтобы строка s  стала равна строке t  . Вам гарантируется, что это возможно. Запишите в ответе взвешенную сумму букв, которые необходимо удалить из p  и вставить в s  .

За каждую букву ′a′ добавьте к сумме 1  , за каждую ′b′ − 2  , ...  , ′z′ − 26  .

Вложения к задаче
Показать ответ и решение

Решение на 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)

 

Ответ: 25693851

Ошибка.
Попробуйте повторить позже

Задача 2#37826

В единственной строке файла 24.txt находится строка s  состоящая не более чем из 107  маленьких букв английского алфавита. Определите можно ли добавить некоторое(возможно нулевое) количество букв «a» в начало строки, чтобы строка стала палиндромом.

Напомним вам, что палиндромом называются строки, которые читаются одинаково как слева-направо, так и справа-налево.

В ответ запишите наименьшее необходимое количество букв «a», а если строку s невозможно сделать палиндромом проделывая описанную операцию — запишите в ответ − 1  .

Вложения к задаче
Показать ответ и решение

Оптимальное решение: проверим, что вся строка s  не состоит только из букв «a», потому что если она состоит, то она уже является палиндромом и ответ 0  . Иначе подсчитаем количество букв «a» стоящих в начале строки s  и количество букв «a» стоящих в конце строки. Если в конце строки стоит меньше букв «a», чем в начале, то добавляя буквы «a» в начало вы точно не сделаете строку палиндромом, поэтому ответ − 1  . Иначе, давайте добавим необходимое количество букв «a» в начало строки и после этого проверим, что полученная строка является палиндромом. Такое решение работает за три прохода по строке, то есть за O (N  + N + N) = O(N )  .

Решение на 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)

Ответ: 1483099

Ошибка.
Попробуйте повторить позже

Задача 3#33620

Задание выполняется с использованием прилагаемых файлов

Текстовый файл состоит из символов 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)

Ответ: 15

Ошибка.
Попробуйте повторить позже

Задача 4#29922

Текстовый файл состоит не более чем из 106  символов ’(’ и ’)’. Известно, что правильная скобочная последовательность берет начало в начале файла. Вам необходимо узнать какую максимальну длину имеет правильная скобочная последовательность. Правильная скобочная последовательность - последовательность скобок, которая подчиняется нескольким правилам:

1) Последовательность начинается с открывающейся скобки

2) Каждая открывающаяся скобка имеет в пару закрывающаяся скобку

3) Количество открывающихся скобок в любой точке скобочной последовательности больше либо равно количеству закрывающихся

Примеры правильных скобочных последовательностей: ()()()  , ()(()())  .

Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_50_ДЗ". В ответе запишите длину искомой последовательности.

Вложения к задаче
Показать ответ и решение
f = open(’Задание_50_ДЗ.txt’)  
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)

Ответ: 10084

Ошибка.
Попробуйте повторить позже

Задача 5#29921

Текстовый файл "Задание_49_ДЗ"содержит только заглавные буквы латинского алфавита (ABC...Z). Текст разбит на строки различной длины. Необходимо найти строку, содержащую наибольшее количество пар соседних букв, которые стоят в таком же порядке как и в алфавите (например, AB, BC, CD и т.д.; в цепочке ABC две таких пары). Если таких строк несколько, надо взять ту, которая в файле встретилась раньше.

Выведите максимальное количество пар, встреченных среди всех строк, а также букву из данной строки, которая встречается чаще всего.

Пример. Исходный файл:

ZCQABA

ZALMAC

CRACUT

В этом примере в первой и второй строках по одной подходящей паре (AB и LM), в третьей таких пар нет. Берём первую строку, т.к. она раньше встречается в файле. В этой строке чаще других встречается буква А. Если бы она была не единственной, то выбрали ту букву, что раньше стоит в алфавите. В ответе для этого примера надо записать 1A.

Вложения к задаче
Показать ответ и решение
f = open(’Задание_49_ДЗ.txt’)  
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))])

 

Ответ: 50Y

Ошибка.
Попробуйте повторить позже

Задача 6#29920

Текстовый файл состоит не более чем из 104  строк, каждая из которых состоит не более чем из 104  заглавных букв латинского алфавита. В строке, содержащей не менее 150 символов Z  найдите максимальное расстояние (разница в индексах) между двумя одинаковыми символами, между которым не повторяется этот символ. Если строк, содержащих не менее 150 символов Z  несколько, то используйте последнюю из таковых для поиска маскимального расстояния.

Пример:

ABBAC

P REREOOOOOR

QW  ERT Y Q

Среди данных строк нет ни одной, где количесто символов Z  не менее 150. Если забыть про это условие (в рамках примера), то максимальное расстояние между символами R  во второй строке и оно равно 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)

 

Ответ: 274

Ошибка.
Попробуйте повторить позже

Задача 7#29919

Текстовый файл состоит не более чем из 104  строк, каждая из которых состоит не менее чем из 10 и не более чем из      103  заглавных букв A  , B  , C  , D  . Найдите количество строк, в которых либо изначально есть 10-символьный палиндром, либо его можно получить перестановкой пары символов из данной подстроки. Например, для строки ABAB  можно поменять символы A  и B  местами.

Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_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)

Ответ: 934

Ошибка.
Попробуйте повторить позже

Задача 8#29918

Текстовый файл состоит не более чем из 106  заглавных букв латинского алфавита. Гарантируется, что количество символов в строке четное. Вам нужно заменить некоторые латинские буквы на другие таким образом, чтобы из символов строки можно было составить палиндром. Например, для строки AVRORA можно заменить O на V или V на O, тогда из данного набора букв мы сможем составить палиндром.

Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_46_ДЗ". В ответе запишите минимальное количество замен, которые нужно сделать.

Вложения к задаче
Показать ответ и решение
f = open("Задание_46_ДЗ.txt")  
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)

 

Ответ: 5

Ошибка.
Попробуйте повторить позже

Задача 9#29917

Текстовый файл состоит не более чем из 106  строк, каждая из которых содержит не менее двух и не более чем 102  букв латинского алфавита. Найдите количество строк палиндромов.

Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_45_ДЗ". В ответе запишите искомое количество.

Вложения к задаче
Показать ответ и решение
# строка содержит в конце символ переноса ’\n’  
# метод str.strip() удаляет этот символ  
print(sum(1 for i in open(’Задание_45_ВЕБ.txt’)  
          if i.strip() == i.strip()[::-1]))  

 

Ответ: 582

Ошибка.
Попробуйте повторить позже

Задача 10#29916

Текстовый файл состоит не более чем из 106  строк, каждая из которых содержит не менее семи и не более чем 102  заглавных букв латинского алфавита. Найдите номер строки (нумерация с 0), которая содержит максимальное количество палиндромов из семи символов. Если таких строк несколько, то в ответе напишите номер первой встретившейся. Палиндром - последовательность символов, которая читается одинаково с двух сторон.

Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_44_ДЗ". В ответе запишите номер искомой строки.

Вложения к задаче
Показать ответ и решение
f = open("Задание_44_ДЗ.txt")  
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)

 

Ответ: 133

Ошибка.
Попробуйте повторить позже

Задача 11#29915

Текстовый файл состоит не более чем из 106  заглавных букв латинского алфавита. Возрастающей последовательностью называется последовательность, элементы которой идут строго в порядке увеличения 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)

Ответ: 9

Ошибка.
Попробуйте повторить позже

Задача 12#29914

Текстовый файл состоит не более чем из 106  заглавных букв латинского алфавита. Локальным максимумом называется символ, id которого в таблице ASCII больше номеров предыдущего и последующего символа в строке. Будем считать, что первый и последний элемент строки не могут быть локальными максимумами. Найдите максимальное расстояние между двумя соседними локальными максимумами, расстояние в данной задаче это разность индексов.

Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_42_ДЗ". В ответе запишите искомое расстояние.

Вложения к задаче
Показать ответ и решение
f = open(’Задание_42_ДЗ.txt’)  
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)

 

Ответ: 20

Ошибка.
Попробуйте повторить позже

Задача 13#29913

Текстовый файл состоит не более чем из 106  заглавных букв латинского алфавита. Найдите последовательность максимальной длины, где символы идут в порядке «больше», «меньше», «больше», «меньше» и т.д. по таблице ASCII. Пример подходящей последовательности: BABACADB  .

Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_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)

Ответ: 32

Ошибка.
Попробуйте повторить позже

Задача 14#29912

Текстовый файл состоит не более чем из 106  заглавных букв латинского алфавита. Найдите последовательность максимальной длины, которая содержит буквы строго в алфавитном порядке, т.е. ABCD...  .

Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_40_ДЗ". В ответе запишите длину искомой последовательности.

Вложения к задаче
Показать ответ и решение
f = open(’Задание_40_ДЗ.txt’)  
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)

 

Ответ: 5

Ошибка.
Попробуйте повторить позже

Задача 15#29911

Текстовый файл состоит не более чем из 106  заглавных букв латинского алфавита. Найдите длину максимальной неубывающей подпоследовательности символов по таблице ASCII.

Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_39_ДЗ". В ответе запишите длину искомой подпоследовательности.

Вложения к задаче
Показать ответ и решение
f = open(’Задание_39_ДЗ.txt’).read()  
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)  

 

Ответ: 10

Ошибка.
Попробуйте повторить позже

Задача 16#29910

Текстовый файл состоит не более чем из 106  цифр от 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)

Ответ: 27

Ошибка.
Попробуйте повторить позже

Задача 17#29909

Текстовый файл состоит не более чем из 106  символов, которые являются цифрами от 1 до 9. Вам необходимо найти количество и сумму двузначных палиндромов в данном файле. Пример для строки "11122"количество равно 3, сумма равна 44.

Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_37_ДЗ". В ответе запишите количество и сумму палиндромов.

Вложения к задаче
Показать ответ и решение
f = open("Задание_37_ДЗ.txt").read()  
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)

 

Ответ: 110942 6098147

Ошибка.
Попробуйте повторить позже

Задача 18#29908

Текстовый файл состоит не более чем из 106  символов, которые являются цифрами от 1 до 9. Вам необходимо найти знакопеременную сумму цифр данного выражения. Считать, что первый знак — "+". Пример для строки "1234" значение суммы равно 1 + 2− 3+ 4 = 4

Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_36_ДЗ". В ответе запишите значение знакопеременной суммы.

Вложения к задаче
Показать ответ и решение
f = open("Задание_36_ДЗ.txt").read()  
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)

 

Ответ: 1098

Ошибка.
Попробуйте повторить позже

Задача 19#29907

Текстовый файл состоит не более чем из 106  символов, которые являются цифрами от 1 до 9, знаками плюс, минус. Найдите подпоследовательность, состоящую из максимального количества положительных чисел. (Положительное число - число, перед которым либо нет знака, либо знак "+")

Для выполнения этого задания следует написать программу. Воспользуйтесь файлом "Задание_35_ДЗ". В ответе запишите сумму данной подпоследовательности, если подпоследовательностей с максимальным количеством положительных элементов несколько, то в ответе запишите максимальную сумму.

Вложения к задаче
Показать ответ и решение
f = open(’Задание_35_ДЗ.txt’).read()  
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)

 

Ответ: 62

Ошибка.
Попробуйте повторить позже

Задача 20#29906

Текстовый файл состоит не более чем из 106  символов, которые являются цифрами от 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))

 

Ответ: 637
Рулетка
Вы можете получить скидку в рулетке!