===== Условие ===== Исполнитель Редактор получает на вход строку символов и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов. А) заменить (v, w). Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды заменить (111, 27) преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку. Б) нашлось (v). Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется. __Цикл__ ПОКА условие последовательность команд КОНЕЦ ПОКА выполняется, пока условие истинно. __В конструкции__ ЕСЛИ условие ТО команда1 ИНАЧЕ команда2 КОНЕЦ ЕСЛИ выполняется команда1 (если условие истинно) или команда2 (если условие ложно). **Дана программа для Редактора: ** НАЧАЛО ПОКА нашлось (>1) ИЛИ нашлось (>2) ИЛИ нашлось (>0) ЕСЛИ нашлось (>1) ТО заменить (>1, 22>) КОНЕЦ ЕСЛИ ЕСЛИ нашлось (>2) ТО заменить (>2, 2>) КОНЕЦ ЕСЛИ ЕСЛИ нашлось (>0) ТО заменить (>0, 1>) КОНЕЦ ЕСЛИ КОНЕЦ ПОКА КОНЕЦ На вход приведённой выше программе поступает строка, начинающаяся с символа «>», а затем содержащая 39 цифр «0», n цифр «1» и 39 цифр «2», расположенных в произвольном порядке. Определите наименьшее значение n, при котором сумма числовых значений цифр строки, получившейся в результате выполнения программы, является простым числом. Обратите внимание на фразу "расположенных в произвольном порядке" В преобладающем большинстве случаев это означает, что данный алгоритм работает для строки с произвольным расположением 0 1 и 2 ===== Решение ===== Нам задана функция трансформации строки, реализуем ее на python, обзовем эту функцию ''transform(s)''. Далее нам понадобится функция, которая будет складывать цифры из нашей строки ''sum_digits(s)''. Логика работы этой функции следующая: просматриваем посимвольно нашу строку, если очередной символ '0'...'9' - вычитаем из его кода код символа '0'. Это даст нам числовое значение символа. Такой трюк возможен, так как в ASCII таблице символы '0'..'9' идут друг за другом. И наконец, функция проверки числа на простое ''is_prime(n)''. Она считает количество делителей числа n, если их 2 - то число простое. def is_prime(n): dividers =0 for i in range(1, n+1): if n%i==0: dividers+=1 return dividers == 2 def sum_digits(s): ss = 0 for ch in s: if ch>='0' and ch<='9': ss = ss + (ord(ch) - ord('0')) return ss def transform(a): while ('>1' in a) or ('>2' in a ) or ('>0' in a): if '>1' in a: a = a.replace('>1','22>', 1) if '>2' in a: a = a.replace('>2', '2>', 1) if '>0' in a: a =a.replace('>0', '1>', 1) return a flag = False n = 1 while not flag: s = '>'+39*'0'+n*'1'+39*'2' s = transform(s) val = sum_digits(s) if is_prime(val): print(n) flag = True n=n+1 $python ex.py 5