Эластичная змея выглядит примерно так:
<||=|||:)~
Каждая отдельная последовательность вертикальных столбцов ( |
) в эластичной змеи, известная как эластичная часть , индивидуально расширяется вдвое по ширине и рисуется с помощью чередующихся косых черт ( /
, \
) после расширения.
У конкретной змеи выше есть две такие эластичные части, что дает ей четыре возможных позы:
<||=|||:)~
</\/\=|||:)~
<||=/\/\/\:)~
</\/\=/\/\/\:)~
Общая форма эластичной змеи в ее наименее растянутой позе определяется этим регулярным выражением :
<(\|+=)*\|+:\)~
Который можно выразить словами:
<
, За которым следует любое количество последовательностей|
«ы вступил с=
признаками, а затем:)~
.
Так <|:)~
и <||:)~
и <|=|:)~
и <|=|=||=|||||=||:)~
растягиваются змеями, но <=:)~
и <=|:)~
и <||=:)~
и <|==||:)~
не являются.
Эластичные змеи также могут быть направлены влево, а не вправо, например ~(:|||=||>
. Формы одинаковые, просто зеркальные.
Вызов
Напишите программу, которая принимает в одну строку строку из двух растягивающихся змей, обращенных друг к другу, с некоторым количеством пробелов между ними. Обе змеи будут в своей наименее растянутой позе (все вертикальные полосы, без слешей). Строка начинается с хвоста змеи, обращенной вправо, и заканчивается хвостом змеи, обращенной налево (вы можете при желании предположить, что есть также завершающий символ новой строки).
Например, вот возможный ввод с пятью пробелами между змеями:
<|=||:)~.....~(:||||>
Я использую period ( .
) вместо реальных пробелов для ясности.
Ноль пробелов между змеями также допустим:
<|=||:)~~(:||||>
Мы говорим, что змеи целуются, когда их языки соприкасаются вот так.
Ваша программа должна расширить некоторую комбинацию растягивающихся частей обеих змей так, чтобы у змей было как можно меньше промежутков между ними (без наложения), то есть так, чтобы змеи были как можно ближе к поцелуям .
Хвосты обеих змей фиксированы, но их головы и тела могут двигаться - вправо для змеи, обращенной вправо, влево для змеи, обращенной налево, - в зависимости от того, какие вытянутые части были вытянуты.
Результатом вашей программы является однострочная строка (плюс необязательный завершающий символ новой строки), который показывает змей как можно ближе к поцелуям, с чередующимися косыми чертами вместо вертикальных полос для растянутых участков, которые были расширены.
Например, вывод для <|=||:)~.....~(:||||>
(сверху) будет:
</\=||:)~~(:/\/\/\/\>
Это единственное решение здесь, потому что с любой другой комбинацией вытянутых частей, змеи будут либо перекрываться, либо удаляться от поцелуев.
Если существует несколько возможных решений, вывод может быть любым из них.
Например, если входные данные были
<|=||:)~.....~(:|||=|>
выход может быть
<|=/\/\:)~~(:/\/\/\=|>
или же
</\=||:)~~(:/\/\/\=/\>
Помните, что не всегда можно поцеловать змей, но вам все равно нужно как можно ближе подойти к ним.
Например, если входные данные были
<||=||||:)~...~(:||>
выход может быть
</\/\=||||:)~.~(:||>
или же
<||=||||:)~.~(:/\/\>
Если змеи уже целуются, результат будет таким же, как и у входа. например
<|=||:)~~(:||||>
В общем, выходные данные будут такими же, как и входные, если расширение любой растянутой части приведет к перекрытию змей. например
<|||=|||:)~..~(:||||=|||||=||||||>
Примечания
- Принимает ввод из stdin или командной строки, как обычно, или пишет функцию, которая принимает строку. Распечатать или вернуть вывод.
- Вы можете использовать period (
.
) на входе и выходе вместо пробелов (), если хотите.
- Важно только, чтобы косые черты чередовались в последовательности вертикальных полос, которые они заменяли. Их порядок в змее в целом или то, идет ли вперед или назад косая черта, не имеет значения.
- Эластичные участки не могут расширяться частично - это ровно удвоение или вообще не удлинение.
счет
Это код-гольф . Победит самая короткая подача в байтах. Tiebreaker - более ранний ответ.
>
не стал бы <
ни тот же, для for (
и )
), но он также говорит: «Важно, чтобы косые черты чередовались в последовательности вертикальных полос, которые они заменяли. Их порядок в змея на свободе, или то, будет ли впереди или сзади косая черта, не имеет значения ".