12.01 Исполнитель «Редактор» – известная строка
Готовиться с нами - ЛЕГКО!
Ошибка.
Попробуйте повторить позже
Исполнитель Панцирь получает на вход строку цифр и преобразовывает её. Панцирь может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Панцирь. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь».
Дана программа для исполнителя Панцирь:
НАЧАЛО
ПОКА нашлось ИЛИ нашлось
ПОКА нашлось
заменить
КОНЕЦ ПОКА
ЕСЛИ нашлось
ТО заменить
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Какая строка получится в результате применения приведённой выше программы к строке:
Решение руками
Для удобства будем использвовать следующие обозначения для количества одинаковых цифр,
идущих подряд: где A - цифра, которая находится в строке, а B - количество этих
цифр.
Изначально была строка Цикл ПОКА внутри основного цикла ПОКА будет работать до
момента исчезновения всех семерок, таким образом после выполнения этого цикла строка будет состоять
из 20 пятерок.
Далее количество пятерок будет уменьшаться, пока не останется одна пятерка.
Решение программой
s = ’5’ * 20 + ’7’ * 40 while ’55’ in s or ’7’ in s: while ’57’ in s: s = s.replace(’57’, ’5’, 1) if ’55’ in s: s = s.replace(’55’, ’5’, 1) print(s)
Ошибка.
Попробуйте повторить позже
Исполнитель Панцирь получает на вход строку цифр и преобразовывает её. Панцирь может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Панцирь. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь».
Дана программа для исполнителя Панцирь:
НАЧАЛО
ПОКА нашлось ИЛИ нашлось
ПОКА нашлось
заменить
КОНЕЦ ПОКА
ЕСЛИ нашлось
ТО заменить
ИНАЧЕ ЕСЛИ нашлось
ТО заменить
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Найдите сумму цифр в строке, полученной в результате применения приведённой выше программы к
строке:
Решение руками
Для удобства будем использвовать следующие обозначения для количества одинаковых цифр,
идущих подряд: где A - цифра, которая находится в строке, а B - количество этих
цифр.
Изначально была строка Цикл ПОКА внутри основного цикла ПОКА будет работать до
момента исчезновения всех семерок, таким образом после выполнения этого цикла строка будет состоять
из 135 пятерок.
Далее все пятерки кроме последней исчезнут, а на их месте появятся семерки.
После этого все семерки заменятся шестерками и программа завершит свою работу. В полученной
строке 67 шестерок и 1 пятерка, сумма цифр равна
Решение программой
s = ’5’ * 35 + ’7’ * 100 while ’55’ in s or ’7’ in s: while ’57’ in s: s = s.replace(’57’, ’55’, 1) if ’55’ in s: s = s.replace(’55’, ’7’, 1) elif ’7’ in s: s = s.replace(’7’, ’6’, 1) sum_of_digits = sum(int(digit) for digit in s) print(sum_of_digits)
Ошибка.
Попробуйте повторить позже
Исполнитель Панцирь получает на вход строку цифр и преобразовывает её. Панцирь может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Панцирь. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь».
Дана программа для исполнителя Панцирь:
НАЧАЛО
ПОКА нашлось ИЛИ нашлось
ПОКА нашлось
ТО заменить
КОНЕЦ ПОКА
ЕСЛИ нашлось
ТО заменить
ИНАЧЕ ЕСЛИ нашлось
ТО заменить
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Найдите сумму цифр в строке, полученной в результате применения приведённой выше программы к
строке:
Решение руками
Для удобства будем использвовать следующие обозначения для количества одинаковых цифр,
идущих подряд: где A - цифра, которая находится в строке, а B - количество этих
цифр.
Изначально была строка Цикл ПОКА внутри основного цикла ПОКА будет работать до
момента исчезновения всех девяток, таким образом после выполнения этого цикла строка будет состоять
из 103 троек.
Далее все тройки кроме последней исчезнут, а на их месте появятся девятки.
После этого все девятки заменятся нулями и программа завершит свою работу. В полученной строке 51 ноль и 1 тройка, сумма цифр равна 3.
Решение программой
s = ’3’ * 49 + ’9’ * 54 while ’33’ in s or ’9’ in s: while ’39’ in s: s = s.replace(’39’, ’33’, 1) if ’33’ in s: s = s.replace(’33’, ’9’, 1) elif ’9’ in s: s = s.replace(’9’, ’0’, 1) sum_of_digits = sum(int(digit) for digit in s) print(sum_of_digits)
Ошибка.
Попробуйте повторить позже
Исполнитель Панцирь получает на вход строку цифр и преобразовывает её. Панцирь может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Панцирь. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь».
Дана программа для исполнителя Панцирь:
НАЧАЛО
ПОКА нашлось ИЛИ нашлось
ПОКА нашлось
ТО заменить
КОНЕЦ ПОКА
ЕСЛИ нашлось
ТО заменить
ИНАЧЕ ЕСЛИ нашлось
ТО заменить
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Определите количество преобладающих цифр в строке, полученной в результате применения
приведённой выше программы к строке:
Решение руками
Для удобства будем использвовать следующие обозначения для количества одинаковых цифр,
идущих подряд: где A - цифра, которая находится в строке, а B - количество этих
цифр.
Изначально была строка Цикл ПОКА внутри основного цикла ПОКА будет работать до
момента исчезновения всех девяток, таким образом после выполнения этого цикла строка будет состоять
из 405 троек.
Далее все тройки кроме последней исчезнут, а на их месте появятся девятки.
После этого все девятки заменятся нулями и программа завершит свою работу. В полученной строке 202 нуля.
Решение программой
s = ’3’ * 93 + ’9’ * 312 while ’33’ in s or ’9’ in s: while ’39’ in s: s = s.replace(’39’, ’33’, 1) if ’33’ in s: s = s.replace(’33’, ’9’, 1) elif ’9’ in s: s = s.replace(’9’, ’0’, 1) count_0 = s.count(’0’) count_9 = s.count(’9’) if count_0 > count_9: print(count_0) else: print(count_9)
Ошибка.
Попробуйте повторить позже
Исполнитель Панцирь получает на вход строку цифр и преобразовывает её. Панцирь может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Панцирь. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь».
Дана программа для исполнителя Панцирь:
НАЧАЛО
ПОКА нашлось ИЛИ нашлось
ПОКА нашлось
ТО заменить
КОНЕЦ ПОКА
ЕСЛИ нашлось
ТО заменить
ИНАЧЕ ЕСЛИ нашлось
ТО заменить
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Найдите число, полученное в результате применения приведённой выше программы к строке:
Ответ запишите в двоичной системе счисления.
Решение руками
Для удобства будем использвовать следующие обозначения для количества одинаковых цифр,
идущих подряд: где A - цифра, которая находится в строке, а B - количество этих
цифр.
Изначально была строка Цикл ПОКА внутри основного цикла ПОКА будет работать до
момента исчезновения всех двоек, таким образом после выполнения этого цикла строка будет состоять
из 87 единиц.
Далее все единицы кроме последней исчезнут, а на их месте появятся двойки.
После этого все двойки заменятся нулями и программа завершит свою работу. В полученной строке
78 нулей и 1 единица. Если полученную строку нужно воспринимать как число, то незначащие нули
неважны для записи числа, значит ответ 1, т.к.
Решение программой
s = ’1’ * 56 + ’2’ * 31 while ’11’ in s or ’2’ in s: while ’12’ in s: s = s.replace(’12’, ’11’, 1) if ’11’ in s: s = s.replace(’11’, ’2’, 1) elif ’2’ in s: s = s.replace(’2’, ’0’, 1) binary_number = bin(int(s))[2:] print(binary_number)
Ошибка.
Попробуйте повторить позже
Исполнитель Панцирь получает на вход строку цифр и преобразовывает её. Панцирь может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Панцирь. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь».
Дана программа для исполнителя Панцирь:
НАЧАЛО
ПОКА нашлось ИЛИ нашлось
ПОКА нашлось
ТО заменить
КОНЕЦ ПОКА
ЕСЛИ нашлось
ТО заменить
ИНАЧЕ ЕСЛИ нашлось
ТО заменить
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Найдите число, полученное в результате применения приведённой выше программы к строке:
Ответ запишите в двоичной системе счисления.
Решение руками
Для удобства будем использвовать следующие обозначения для количества одинаковых цифр,
идущих подряд: где A - цифра, которая находится в строке, а B - количество этих
цифр.
Изначально была строка Цикл ПОКА внутри основного цикла ПОКА будет работать до
момента исчезновения всех двоек, таким образом после выполнения этого цикла строка будет состоять
из 87 единиц.
Далее все единицы кроме последней исчезнут, а на их месте появятся двойки.
После этого все двойки заменятся нулями и программа завершит свою работу. В полученной строке
26 нулей и 1 единица. Если полученную строку нужно воспринимать как число, то незначащие нули
неважны для записи числа, значит ответ 1, т.к.
Решение программой
s = ’1’ * 39 + ’2’ * 14 while ’11’ in s or ’2’ in s: while ’12’ in s: s = s.replace(’12’, ’11’, 1) if ’11’ in s: s = s.replace(’11’, ’2’, 1) elif ’2’ in s: s = s.replace(’2’, ’0’, 1) binary_number = bin(int(s))[2:] print(binary_number)
Ошибка.
Попробуйте повторить позже
Исполнитель Панцирь получает на вход строку цифр и преобразовывает её. Панцирь может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Панцирь. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь».
Дана программа для исполнителя Панцирь:
НАЧАЛО
ПОКА нашлось ИЛИ нашлось
ПОКА нашлось
ТО заменить
КОНЕЦ ПОКА
ЕСЛИ нашлось
ТО заменить
ИНАЧЕ ЕСЛИ нашлось
ТО заменить
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Сколько нулей содержится в строке, полученной в результате применения приведённой выше
программы к строке:
Решение руками
Для удобства будем использвовать следующие обозначения для количества одинаковых цифр,
идущих подряд: где A - цифра, которая находится в строке, а B - количество этих
цифр.
Изначально была строка Цикл ПОКА внутри основного цикла ПОКА будет работать до
момента исчезновения всех двоек, таким образом после выполнения этого цикла строка будет состоять
из 87 единиц.
Далее все единицы кроме последней исчезнут, а на их месте появятся двойки.
После этого все двойки заменятся нулями и программа завершит свою работу. В полученной строке 26 нулей.
Решение программой
s = ’1’ * 39 + ’2’ * 14 while ’11’ in s or ’2’ in s: while ’12’ in s: s = s.replace(’12’, ’11’, 1) if ’11’ in s: s = s.replace(’11’, ’2’, 1) elif ’2’ in s: s = s.replace(’2’, ’0’, 1) count_zeros = s.count(’0’) print(count_zeros)
Ошибка.
Попробуйте повторить позже
Исполнитель Панцирь получает на вход строку цифр и преобразовывает её. Панцирь может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Панцирь. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь».
Дана программа для исполнителя Панцирь:
НАЧАЛО
ПОКА нашлось ИЛИ нашлось
ПОКА нашлось
ТО заменить
КОНЕЦ ПОКА
ЕСЛИ нашлось
ТО заменить
ИНАЧЕ ЕСЛИ нашлось
ТО заменить
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Найдите произведение количества тех цифр, которых больше всего, и значения тех цифр, которых
меньше всего в строке, полученной в результате применения приведённой выше программы к строке:
Так, если программа вывела бы 60 пятерок и 10 четверок, то ответом было число
Аналитическое решение
Для удобства будем использвовать следующие обозначения для количества одинаковых цифр,
идущих подряд: где A – цифра, которая находится в строке, а B – количество этих
цифр.
Изначально была строка Цикл ПОКА внутри основного цикла ПОКА будет работать до
момента исчезновения всех двоек, таким образом после выполнения этого цикла строка будет состоять
из 301 единицы.
Далее все кроме последней единицы исчезнут, а на их месте появятся двойки.
После этого все двойки заменятся нулями и программа завершит свою работу. В полученной строке
150 нулей и 1 единица. Больше всего нулей, меньше – единиц, ответ
Решение программой
s = 231 * ’1’ + 70 * ’2’ # Получаем строку # Осуществляем алгоритм while (’11’ in s) or (’2’ in s): while ’12’ in s: s = s.replace(’12’, ’11’, 1) if ’11’ in s: s = s.replace(’11’, ’2’, 1) elif ’2’ in s: s = s.replace(’2’, ’0’, 1) maxCount = 0 # Максимальное количество цифр digit = ’’ # Цифра, которая больше всего раз встречается в строке for d in set(s): # Перебор цифр (без повторений) if s.count(d) > maxCount: maxCount = s.count(d) digit = d # Теперь нужно maxCount умножить на значения цифр, кроме digit for d in set(s): if d != digit: maxCount *= int(d) # Умножаем на числовое значение цифры print(maxCount) # Выводим результат
Ошибка.
Попробуйте повторить позже
Исполнитель Панцирь получает на вход строку цифр и преобразовывает её. Панцирь может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
1. заменить (v, w)
2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Панцирь. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь».
Дана программа для исполнителя Панцирь:
НАЧАЛО
ПОКА нашлось ИЛИ нашлось
ПОКА нашлось
ТО заменить
КОНЕЦ ПОКА
ЕСЛИ нашлось
ТО заменить
ИНАЧЕ ЕСЛИ нашлось
ТО заменить
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Найдите произведение количества тех цифр, которых больше всего, и значения тех цифр, которых
меньше всего в строке, полученной в результате применения приведённой выше программы к строке:
Так, если программа вывела бы 60 пятерок и 10 четверок, то ответом было число
Решение руками
Для удобства будем использвовать следующие обозначения для количества одинаковых цифр,
идущих подряд: где A - цифра, которая находится в строке, а B - количество этих
цифр.
Изначально была строка Цикл ПОКА внутри основного цикла ПОКА будет работать до
момента исчезновения всех двоек, таким образом после выполнения этого цикла строка будет состоять
из 145 троек.
Далее все кроме последней тройки исчезнут, а на их месте появятся двойки.
После этого все двойки заменятся семерками и программа завершит свою работу. В полученной
строке 72 семерки и 1 тройка. Больше всего семерок, меньше – троек, ответ
Решение программой
s = ’3’ * 120 + ’2’ * 25 while ’33’ in s or ’2’ in s: while ’32’ in s: s = s.replace(’32’, ’33’, 1) if ’33’ in s: s = s.replace(’33’, ’2’, 1) elif ’2’ in s: s = s.replace(’2’, ’7’, 1) count = {} for digit in s: if digit in count: count[digit] += 1 else: count[digit] = 1 max_count = -1 min_count = float(’inf’) max_digit = ’’ min_digit = ’’ for digit, cnt in count.items(): if cnt > max_count: max_count = cnt max_digit = digit if cnt < min_count: min_count = cnt min_digit = digit result = max_count * int(min_digit) print(result)
Ошибка.
Попробуйте повторить позже
Исполнитель Редактор получает на вход cтроку цифр и преобразует её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды
заменить (111, 27)
преобразует строку 05111150 в строку 0527150.
Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
Б) нашлось (v).
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
Цикл
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
Дана программа для редактора:
НАЧАЛО
ПОКА нашлось(111)
заменить(111, 11)
КОНЕЦ ПОКА
КОНЕЦ
Какая строка получится в результате применения приведённой выше программы к строке, состоящей из 111 идущих подряд цифр 1? В ответе запишите полученную строку.
Решение руками
Программа ищет три единицы в строке и заменяет их на две единицы. Значит за каждый шаг цикла из строки убирается одна единица (при условии что найдётся три единицы.) Тогда момент, когда уже близок конец цикла — строка 111. Из неё получается 11 после замены и программа больше не может зайти в цикл.
Решение программой
s = ’1’ * 111 while ’111’ in s: s = s.replace(’111’, ’11’, 1) print(s)
Ошибка.
Попробуйте повторить позже
Исполнитель Редактор получает на вход строку цифр и преобразует её. Редактор может выполнять две команды, в обеих
командах и
обозначают цепочки цифр.
А) .
Эта команда заменяет в строке первое слева вхождение цепочки на цепочку
. Например, выполнение
команды
преобразует строку в строку
.
Если в строке нет вхождений цепочки , то выполнение команды заменить
не меняет эту строку.
Б) .
Эта команда проверяет, встречается ли цепочка в строке исполнителя Редактор. Если она встречается, то команда
возвращает логическое значение
, в противном случае возвращает значение
. Строка исполнителя при
этом не изменяется.
выполняется, пока условие истинно.
Дана программа для редактора:
Сколько троек будет содержать строка, которая получится в результате применения приведённой выше программы к
строке, состоящей из идущих подряд чисел
? В ответе запишите только число — количество троек в полученной
строке.
Решение руками
Программа на каждом шаге преобразовывает в
. То есть каждая часть строки
становится
. Раз таких
чисел было
подряд, то каждая из них превратилась в две тройки и в результате получилось
троек.
Решение программой
s = ’123’ * 30 while ’123’ in s: s = s.replace(’12’, ’3’, 1) count_threes = s.count(’3’) print(count_threes)
Ошибка.
Попробуйте повторить позже
Исполнитель Редактор получает на вход строку цифр и преобразует её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды
заменить (111, 27)
преобразует строку 05111150 в строку 0527150.
Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
Б) нашлось (v).
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
Цикл
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
Дана программа для редактора:
НАЧАЛО
ПОКА нашлось(44) ИЛИ нашлось(55)
заменить(44, 4)
заменить(55, 5)
КОНЕЦ ПОКА
КОНЕЦ
Какая строка получится в результате применения приведённой выше программы к строке, состоящей из 20 идущих подряд цифр 4, а затем 20 идущих подряд цифр 5? В ответе запишите полученную строку.
Решение руками
Мы имеем строку из двух частей — четверок слева и пятерок справа. На каждом шаге цикла мы убираем по одной четверке и пятерке. Крайнее состояние — 4455. Снова заходим в цикл и получаем 45. Больше в цикл зайти не можем.
Решение программой
s = ’4’ * 20 + ’5’ * 20 while ’44’ in s or ’55’ in s: s = s.replace(’44’, ’4’, 1) s = s.replace(’55’, ’5’, 1) print(s)
Ошибка.
Попробуйте повторить позже
Исполнитель Редактор получает на вход строку цифр и преобразует её. Редактор может выполнять две команды, в обеих
командах и
обозначают цепочки цифр.
А) .
Эта команда заменяет в строке первое слева вхождение цепочки на цепочку
. Например, выполнение
команды
преобразует строку в строку
.
Если в строке нет вхождений цепочки , то выполнение команды заменить
не меняет эту строку.
Б) .
Эта команда проверяет, встречается ли цепочка в строке исполнителя Редактор. Если она встречается, то команда
возвращает логическое значение
, в противном случае возвращает значение
. Строка исполнителя при
этом не изменяется.
Цикл
выполняется, пока условие истинно.
Дана программа для редактора:
Известно, что в исходной строке сначала шли цифры
, а затем
цифр
. Какая строка получится в результае
работы приведенной выше программы? В ответ запишите только полученную строку.
Решение руками
Благодаря первому условию программа сначала заменит все девятки на шестерки (количество девяток кратно трем,
поэтому их все заменят). Получаем строку из шестерок.
После этого на каждом шаге три шестерки заменяются на одну. Значит за один шаг количество шестёрок уменьшается
на . Программа продолжает заменять до строки
. После этого она в последний раз заходит в цикл и получает
строку
.
Решение программой
s = ’6’ * 3 + ’9’ * 99 while ’666’ in s: if ’999’ in s: s = s.replace(’999’, ’666’, 1) else: s = s.replace(’666’, ’6’, 1) print(s)
Ошибка.
Попробуйте повторить позже
Исполнитель Редактор получает на вход строку цифр и преобразует её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды
заменить (111, 27)
преобразует строку 05111150 в строку 0527150.
Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
Б) нашлось (v).
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
Цикл
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
Дана программа для редактора:
НАЧАЛО
ПОКА (нашлось(38) И нашлось(83)) ИЛИ нашлось(39)
заменить(383, 9)
заменить(39, 6)
КОНЕЦ ПОКА
КОНЕЦ
Какая строка получится в результате работы приведенной выше программы к строке, состоящей из 10 подряд идущих чисел 383? В ответ запишите полученную строку.
Решение руками
Программа заменяет все числа 383 на 9. Причем делает это с теми, что стоят левее, а значит 39 никогда не встретится и вторая замена никогда не случится.
Все 383 заменились на 9, а значит в итоге мы получаем десять девяток.
Решение программой
s = ’383’ * 10 while (’38’ in s and ’83’ in s) or ’39’ in s: s = s.replace(’383’, ’9’, 1) s = s.replace(’39’, ’6’, 1) print(s)
Ошибка.
Попробуйте повторить позже
Исполнитель Редактор получает на вход строку цифр и преобразует её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды
заменить (111, 27)
преобразует строку 05111150 в строку 0527150.
Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
Б) нашлось (v).
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
Цикл
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
Дана программа для редактора:
НАЧАЛО
ПОКА нашлось (12) ИЛИ нашлось (333)
ЕСЛИ нашлось (12)
заменить (12, 3)
ИНАЧЕ
заменить (333, 3)
КОНЕЦ ПОКА
КОНЕЦ
Какая строка получится в результате применения приведённой выше программы к строке, состоящей из 40 подряд идущих троек чисел 123? В ответе запишите полученную строку.
Решение 1
Благодаря замене 12 на 3 сначала все числа 123 перейдут в 33. А значит будет 40 * 2 = 80 троек.
За счет замены 333 на 3 за каждый шаг цикла из строки убирается 2 тройки пока находятся три тройки.
Переломный момент наступает когда строка становится 3333 и цикл срабатывает последний раз. Получается строка 33 и программа в цикл больше не зайдёт.
Решение 2
a = ’123’ * 40 while ’12’ in a or ’333’ in a: a = a.replace(’12’, ’3’, 1) a = a.replace(’333’, ’3’, 1) print(a)
Ошибка.
Попробуйте повторить позже
Исполнитель Редактор получает на вход строку цифр и преобразует её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды
заменить (111, 27)
преобразует строку 05111150 в строку 0527150.
Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
Б) нашлось (v).
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
Цикл
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
Дана программа для редактора:
НАЧАЛО
ПОКА нашлось(4444) ИЛИ нашлось(333)
заменить(444, 3)
ЕСЛИ нашлось(333)
заменить(333, 2)
КОНЕЦ ПОКА
КОНЕЦ
Какая строка получится в результате применения приведённой выше программы к строке, состоящей из 44 идущих подряд цифр 4? В ответе запишите полученную строку.
Решение руками
Проделаем операции над строкой согласно программе и попробуем выявить закономерность.
Будем обозначать повторение символа «
»
раз.
Получившаяся двойка больше не используется в программе, а значит девять четвёрок становятся одной двойкой.
Если продолжнить, то на каком-то шаге мы получим 222244444444. После замены два раза четвёрок на тройки мы получим 22223344 и программа больше не зайдёт в цикл.
Решение программой
s = ’4’ * 44 while ’4444’ in s or ’333’ in s: s = s.replace(’444’, ’3’, 1) if ’333’ in s: s = s.replace(’333’, ’2’, 1) print(s)
Ошибка.
Попробуйте повторить позже
Исполнитель Редактор получает на вход строку символов и преобразует её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды
заменить (111, 27)
преобразует строку 05111150 в строку 0527150.
Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
Б) нашлось (v).
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
Цикл
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
Дана программа для редактора:
ПОКА нашлось(СОН) или нашлось(ПОН)
ЕСЛИ нашлось(С)
заменить(С, П)
ИНАЧЕ
заменить(ПОНПОНПОН, КЛОН)
КОНЕЦ ПОКА
КОНЕЦ
Какая строка получится в результате применения приведённой выше программы к строке, состоящей из 15 идущих подряд слов СОН? В ответе запишите полученную строку.
Решение руками
Благодаря первому условию все С заменяться на П и мы получим строку, состоящую из 15 идущих подряд слов ПОН.
После каждые три слова ПОН будут заменены на КЛОН. Значит мы получим 15 / 3 = 5 слов КЛОН.
Значит ответ — КЛОНКЛОНКЛОНКЛОНКЛОН.
Решение программой
s = ’СОН’ * 15 while ’СОН’ in s or ’ПОН’ in s: if ’С’ in s: s = s.replace(’С’, ’П’, 1) else: s = s.replace(’ПОНПОНПОН’, ’КЛОН’, 1) print(s)
Ошибка.
Попробуйте повторить позже
Исполнитель Редактор получает на вход строку цифр и преобразует её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды
заменить (111, 27)
преобразует строку 05111150 в строку 0527150.
Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
Б) нашлось (v).
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
Цикл
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
Дана программа для редактора:
НАЧАЛО
ПОКА нашлось (2121) ИЛИ нашлось (111)
ЕСЛИ нашлось (2121)
заменить (2121, 2)
ИНАЧЕ
заменить (111, 12)
КОНЕЦ ПОКА
КОНЕЦ
Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 80 идущих подряд цифр 1? В ответе запишите полученную строку.
Решение руками
Попробуем проделать несколько итераций вручную и выявить закономерность.
Будем обозначать повторение символа «
»
раз.
Как можно заметить, произошел переход , при котором были удалены четыре единицы.
С помощью этого перехода можно преобразовывать строку вплоть до состояния 1211111. Дальше три единицы заменяются, получаем строку 121211. После этого программа в последний раз зайдет в цикл и получит строку 121.
Решение программой
s = ’1’ * 80 while ’2121’ in s or ’111’ in s: if ’2121’ in s: s = s.replace(’2121’, ’2’, 1) else: s = s.replace(’111’, ’12’, 1) print(s)
Ошибка.
Попробуйте повторить позже
Исполнитель Редактор получает на вход строку символов и преобразует её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды
заменить (111, 27)
преобразует строку 05111150 в строку 0527150.
Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
Б) нашлось (v).
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
Цикл
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
Дана программа для редактора:
НАЧАЛО
ПОКА нашлось(AB)
заменить(A, BB)
заменить(B, CCC)
заменить(CCCCC, AB)
КОНЕЦ ПОКА
КОНЕЦ
Сколько раз встретится буква C в строке, полученной после выполнения алгоритма выше для строки состоящей из последовательности букв ABC повторяющейся 30 раз? В ответ укажите только число.
Для решения этого задания напишем программу:
s = ’ABC’ * 30
# Аналог пока нашлось(AB)
while ’AB’ in s:
# Проводим замену по одному разу
s = s.replace(’A’, ’BB’, 1)
s = s.replace(’B’, ’CCC’, 1)
s = s.replace(’CCCCC’, ’AB’, 1)
print(s.count(’C’)) # Вывод количества символов С в строке
Ошибка.
Попробуйте повторить позже
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в
которых и
обозначают последовательности цифр:
А) заменить
Эта команда заменяет в строке первое слева вхождение последовательности на последовательность
Например, выполнение команды заменить преобразует строку
в строку
Если в строке нет вхождений последовательности то выполнение команды заменить
не меняет эту
строку.
Б) Нашлось
Эта команда проверяет, встречается ли последовательность в строке исполнителя Редактор. Если она
встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение
«ложь».
Строка исполнителя при этом не изменяется.
Цикл
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
Выполняется, пока условие истинно.
В конструкции:
ЕСЛИ условие
ТО команда1
КОНЕЦ ЕСЛИ Выполняется команда1 (если условие истинно).
ЕСЛИ условие
ТО команда1
ИНАЧЕ команда2
КОНЕЦ ЕСЛИ Выполняется Выполняется команда1 (если условие истинно) или команда2 (если условие ложно).
Какая строка получится в результате применения приведённой ниже программы к строке:
НАЧАЛО
ПОКА нашлось
ЕСЛИ нашлось
ТО заменить
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Если вы получили строку вида , то в ответе нужно записать
, а для строки
-
,
скобки ставятся при трех и более повторениях.
Аналитическое решение
Очевидно, что все единицы заменятся на нули, следовательно, все двадцать единиц заменятся на нули и получится строка из двадцати нулей.
Программное решение
s = ’1’ * 20 while ’1’ in s: if ’1’ in s: s = s.replace(’1’, ’0’, 1) print(s)