Задача №111885. Управление «Curiosity»
«Curiosity» – это марсоход, который исследует кратер Гейла на Марсе. Недавно он обнаружил воду в марсианской почве, что облегчит высадку людей на Марс.
«Curiosity» поддерживает связь с Землей по каналу со скоростью 32 Kbit/s, но средняя задержка сигнала между Марсом и Землей составляет 14 минут и 6 секунд
“Ты только что увидел камень и нажал на тормоз, но ты знаешь, что марсоход уже проехал через этот камень” - объясняет Мэтт Хеверли, водитель марсохода. “Так что мы сначала планируем маршрут, а потом записываем последовательность простых команд: ехать на метр вперед, повернуть налево, сфотографировать и так далее”.
Иногда важно быстро реагировать на неожиданные события. Например, если камеры обнаружили что-то интересное, то нужно изменить маршрут и сделать дополнительную фотографию. Для этого на марсоход посылается команда вида
s/string/replacement/g. Она заменяет все вхождения строки
stringна строку
replacement, начиная с самой левой.
Более формально, если \(A\) - непустая строка и \(B\) - строка, то для применения команды
s/A/B/gк строке \(S\) Вам надо сделать следующее:
- Найти самое левое вхождение строки \(A\) в строку \(S\), такое что \(S = S_L + A + S_R\).
- Если такого вхождения нет, то остановиться. Ответом будет строка \(S\).
- Пусть \(R\) есть результат применения
s/A/B/g
к \(S_R\). - Ответом будет строка \(S_L + B + R\).
Это значит, что если есть два перекрывающихся вхождения строки \(A\) в строку \(S\), то только левое будет заменено. Например, применение “
s/aba/c/g” к строке “abababa” дает “cbc”.
Чем дольше команда, тем больше времени надо на её передачу. Поэтому Вам надо написать программу, находящую кратчайшую команду, превращающую начальную строку в конечную.
Первая и вторая строки содержат начальную и конечную строки, соответственно. Обе строки непусты и их длины не превосходят \(2000\) символов. Строки содержат только латинские буквы, пробелы и знаки пунктуации (запятые, двоеточия, точки с запятой и дефисы: ‘,’, ‘:’, ‘;’, ‘-’). Данные строки не равны.
Выведите наикратчайшую команду замены, которая превращает начальную строку в конечную. Если таких команд несколько, выведите любую из них.
move left, move right; move up move left, move down, move up
s/right;/down,/g
If not found: move x; else move -x If found: move x; else move -x
s/ not//g