Группа Вопросы Вопросы Kotik 7 месяцев назад

Задача на ночь от Е.Джобса. Тема Редактор из ЕГЭ

449 просмотров

(Е. Джобс) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов.

1. заменить (v, w) 
2. нашлось (v)

Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Редактор.
Дана программа для исполнителя Редактор:

НАЧАЛО
ПОКА нашлось (900) или нашлось(8000) или нашлось(70)
заменить(70, 8)
заменить(900, 70)
заменить(8000, 900)
КОНЕЦ ПОКА
КОНЕЦ

Известно, что на вход программы поступила строка из 71 символа. Определите минимальное четырехзначное число, которое может являться результатом работы исполнителя

Помогите решить задание. Не понимаю, как написать код и как решить.

Мой код:

def f(s): while '900' in s or '8000' in s or '70' in s: s = s.replace('70', '8', 1) s = s.replace('900', '70', 1) s = s.replace('8000', '900', 1) return sfor i in product('0879', repeat = 71): s = ''.join(i) if len(f(s)) == 4: print(s, f(s))
Kotik
Правила необходимо знать, но лучше создавать их самому. И действовать нужно сейчас!
Kotik
Kotik
7 месяцев назад
+1
  1. def f_1(s):
  1. prev = s
  1. while True:
  1. s = s.replace('900', '8000', 1)
  1. s = s.replace('70', '900', 1)
  1. s = s.replace('8', '70', 1)
  1. if len(s) == 71:
  1. print(s)
  1. return True
  1. elif len(s) > 71:
  1. print("No")
  1. return False
  1. elif prev == s:
  1. return False
  1. prev = s
  1. print(f_1('1008'))
  1. for i in range(1000, 10000):
  1. if f_1(str(i)):
  1. print(i)
  1. break
  1. print("finish")
#