Базовый (1 балл)
Время: 2-4 мин
Python while
s.replace(old, new, 1)
Все задачи №{ topic_num } в каталоге
Задание №12. Исполнитель Редактор
Тема: Преобразование строк командами 'нашлось' и 'заменить', поиск суммы цифр
Моделирование работы алгоритма Редактора на Python. Обязательно использовать replace() с третьим аргументом 1.
1. Ключевое правило Задания №12 на Python:
В алгоритме Редактора команда заменить(v, w) заменяет ТОЛЬКО ПЕРВОЕ СЛЕВА вхождение цепочки $v$ на $w$.
⚠️ ВАЖНО: В Python метод
replace() без третьего аргумента заменяет ВСЕ вхождения сразу! Всегда передавайте единицу: s = s.replace('111', '2', 1).
Разновидности и прототипы задания на экзамене
Тип 1: Прямой запуск алгоритма на заданной строке
Строка вида '1' + '2'*N + '3'*M.
Тип 2: Подбор минимальной/максимальной длины N
Перебор n в цикле `for n in range(4, 1000):` до выполнения условия на сумму цифр.
Боевой шаблон решения на Python
Запустить код в онлайн-песочнице# === Боевой шаблон Задания №12 на Python ===
# Перебираем длину строки N (если требуется найти N):
for n in range(4, 1000):
# Формируем исходную строку по условию:
s = '>' + '1' * 26 + '2' * n + '3' * 26
# Моделируем цикл алгоритма:
while '>1' in s or '>2' in s or '>3' in s:
if '>1' in s:
s = s.replace('>1', '22>', 1)
if '>2' in s:
s = s.replace('>2', '2>', 1)
if '>3' in s:
s = s.replace('>3', '1>', 1)
# Считаем сумму цифр в получившейся строке:
sum_digits = sum(int(c) for c in s if c.isdigit())
# Проверяем условие задачи (например, сумма цифр равна 100):
if sum_digits == 100:
print("Искомое n:", n)
break
Анти-примеры (Типичные ошибки vs Как делать правильно)
Как делать НЕ надо:
Ошибка: s = s.replace('11', '2') без единицы
Заменит все '11' одновременно, что полностью исказит поведение редактора!
Как делать ПРАВИЛЬНО:
Правильно: ВСЕГДА указывать 1: s.replace('11', '2', 1)
ГРОБ
ГРОБ №12: Сумма цифр является простым числом
Условие: сумма цифр полученной строки — простое число.
Как обойти ловушку: Напишите функцию проверки простоты: `def is_prime(x): return x > 1 and all(x % d != 0 for d in range(2, int(x**0.5) + 1))`.
Лайфхаки и подводные камни на экзамене:
- Сумма цифр строки в Python считается в 1 строку: `sum(map(int, s.replace('>', '')))`.