Форум » Теория игр » Задание 12.140 » Ответить

Задание 12.140

Техноромантик: Добрый вечер! [more]140) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр. заменить (v, w) нашлось (v) Дана программа для исполнителя Редактор: НАЧАЛО ПОКА нашлось (2222) ИЛИ нашлось (666) ЕСЛИ нашлось (2222) ТО заменить (2222, 6) ИНАЧЕ заменить (666, 2) КОНЕЦ ЕСЛИ КОНЕЦ ПОКА КОНЕЦ Какая строка получится в результате применения приведённой выше программы к строке, со-стоящей из 239 идущих подряд цифр 2? В ответе запишите полученную строку. [/more] Для наглядности рассмотрим строку из 12 двоек: 222222222222 Тогда преобразования будут такие: 222222222222 => 622222222 => 662222 => 666 => 2 То есть за 4 итерации цикла количество двоек в строке уменьшилось на 11 Тогда за n = 21 повторений получим: 239 - 21*11 = 8 двоек: 22222222 => 62222 => 66 Мой ответ: 66 Ответ автора: 26222 UPD: Попробовал написать программу на Python и получил следующее: s = '2'*239 while '2222' in s or '666' in s: if '2222' in s: s = s.replace('2222', '6') else: s = s.replace('666', '2') print(s) Результат: 2622266222 Подскажите, пожалуйста, что может быть не так. Заранее спасибо!

Ответов - 2

polyakovss: Здравствуйте, Техноромантик! 1) Сначала (пока в строке имеются 4 идущие подряд "2") "2" заменяются на "6": в строке будет 59 "6" и 3 "2" (239 div 4 = 59; 239 mod 4 = 3); 2) после следующих 4 циклов строка возвращается к тому же виду (сначала все "6", а затем 3 "2"), но количество "6" уменьшается на 11 3) поэтому в итоге получается 4 "6" и 3 "2" (59 mod 11 = 4); 4) Окончательно: 6666222 --> 26222 [pre2] s = '2'*239 while '2222' in s or '666' in s: if '2222' in s: s = s.replace('2222', '6', 1) else: s = s.replace('666', '2', 1) print(s) [/pre2] Здесь третий аргумент (равный 1) – это количество замен, которые нужно выполнить

Техноромантик: polyakovss пишет: Вас понял. Спасибо за ответ.



полная версия страницы