Исполнитель ОРТОЦЕНТР получает на вход строку цифр и преобразовывает её. ОРТОЦЕНТР может выполнять две команды, в обеих командах и
обозначают цепочки символов.
1.
2.
Дана программа для исполнителя ОРТОЦЕНТР:
Найдите сумму всех цифр , стоящих на нечетных позициях (нумерация индексов начинается с нуля), строки, полученной в результате применения приведённой выше программы к строке
Решение ручками:
Начнем работу нашего алгоритма. Так как в исходной строке мы нашли , то заменим
на
.
Получим строку
На данной итерации цикла строка больше меняться не будет, идем дальше. Вновь встречаем , можем заметить, что если встречается
, то количество
уменьшается на один, а количество
остается неизменным, тогда можем выполнить это дейстие еще 199 раз, пока у нас не закончатся
.
Получим строку
Так как у нас уже нет комбинаций , проверяем следующие условия — находим
, меняем
на
.
Получим строку
Заметим, что после выполнения данного действия количество уменьшается на два, а количество
увеличивается на единицу (но все появившиеся
ставятся слева). Тогда выполним это действие еще
раз (так как у нас поделилось с остатком, то
останутся в количестве, равном данному остатку), после этого получим:
На этом работа алгоритма завершится, ведь больше нет подходящих подстрок.
Запишем в ответ сумму цифр , стоящих на нечетных позициях. Сначала определим индексы всех
: [0, 56] и [58, 112]. Теперь среди этих отрезков находим количество нечетных индексов — оно будет равно
, тогда общая сумма подходящих нам цифр
равна
.
Решение прогой:
s = "1" * 115 + "0" * 200 + "3" * 55
while "10" in s or "11" in s or "330" in s:
if "10" in s:
s = s.replace("10", "1", 1)
elif "11" in s:
s = s.replace("11", "3", 1)
elif "330" in s:
s = s.replace("330", "100", 1)
print(sum([int(s[i]) for i in range(len(list(s))) if int(s[i]) == 3 and i % 2 != 0]))