Предположим, мы используем следующие правила для извлечения одной строки из другой строки, содержащей только печатаемые символы ASCII и называемой *
-string. Если строка заканчивается до остановки процесса, это является ошибкой, и результат процесса в этом случае не определен:
- Начать с
d=1, s=""
- Всякий раз, когда вы сталкиваетесь с
*
, умножьтеd
на 2. Всякий раз, когда вы встречаете другого персонажа, объедините его до концаs
и вычтите 1 изd
. Если сейчасd=0
, остановить и вернутьсяs
Определенные примеры :
d->d
769->7
abcd56->a
*abcd56->ab
**abcd56->abcd
*7*690->769
***abcdefghij->abcdefgh
Неопределенные примеры : (обратите внимание, что пустая строка будет одним из них)
*7
**769
*7*
*a*b
*
Ваша задача - взять строку и вернуть самую короткую *
строку, которая генерирует эту строку.
Примеры программ :
7->7
a->a
ab->*ab
abcd->**abcd
769->*7*69
Ваша программа должна обрабатывать любую строку, содержащую хотя бы один символ и только не *
печатаемые символы ASCII. Вы никогда не сможете вернуть строки, для которых процесс не определен, так как по определению они не могут создавать ЛЮБЫЕ строки.
Применяются стандартные лазейки и правила ввода / вывода.
*
?