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