Еластична змія виглядає приблизно так:
<||=|||:)~
Кожна окрема послідовність вертикальних брусків ( |
) в еластичній змії, відомій як еластична частина , індивідуально розширюється вдвічі більше її ширини і намальована поперемінними нахилами ( /
, \
) один раз подовженими.
Конкретна змія вгорі має дві такі еластичні ділянки, надаючи їй чотири можливі пози:
<||=|||:)~
</\/\=|||:)~
<||=/\/\/\:)~
</\/\=/\/\/\:)~
Загальна форма витягнутої змії в її найменш розтягнутій позі визначається цим регулярним виразом :
<(\|+=)*\|+:\)~
Які можна сказати словами як:
<
, За яким слід будь-яку кількість послідовностей|
«и вступив з=
ознаками, а потім:)~
.
Так <|:)~
і <||:)~
і <|=|:)~
і <|=|=||=|||||=||:)~
є еластичні змії, але <=:)~
і <=|:)~
і <||=:)~
і <|==||:)~
не є.
Еластичні змії можуть також стикатися ліворуч, а не праворуч, наприклад ~(:|||=||>
. Форми однакові, просто дзеркальні.
Виклик
Напишіть програму, яка включає в один рядок рядок двох еластичних змій, звернених один до одного, з деякою кількістю пробілів між ними. Обидві змії будуть знаходитись у найменш розтягнутій позі (всі вертикальні бруски, без косої риски). Рядок розпочнеться з хвоста змії, що стоїть правою стороною, і закінчиться хвостом змії, що стоїть ліворуч (можна, при бажанні, припустити, що є також зворотний новий рядок).
Наприклад, ось можливий вхід з п'ятьма пробілами між зміями:
<|=||:)~.....~(:||||>
Я використовую періоди ( .
) замість фактичних символів простору для наочності.
Нульовий пробіл між зміями також є дійсним введенням:
<|=||:)~~(:||||>
Ми кажемо, що змії цілуються, коли їхні язики так торкаються.
Вашій програмі необхідно розширити деяку комбінацію розтяжних частин обох змій, щоб змії мали між собою найменшу кількість пробілів (без перекриття), тобто такі, щоб змії були максимально близькими до поцілунків .
Обидві хвости змій закріплені, але їх голови та тіла можуть переміщатися - праворуч для правої змії, ліворуч - для змії, що стоїть ліворуч - відповідно до того, які розтягнуті частини були розширені.
Результатом вашої програми є однорядковий рядок (плюс необов'язковий трейлінг нового рядка), який показує змій якомога ближче до поцілунків, з чергуванням нахилів, накреслених замість вертикальних брусків для розтягнутих ділянок, які були розширені.
Наприклад, вихід для <|=||:)~.....~(:||||>
(зверху) буде:
</\=||:)~~(:/\/\/\/\>
Це єдине рішення тут, оскільки при будь-якій іншій комбінації розтягнутих частин, змії або перекриваються, або віддаляються від поцілунків.
Якщо можливі кілька рішень, вихід може бути будь-яким з них.
Наприклад, якщо введення було
<|=||:)~.....~(:|||=|>
вихід може бути
<|=/\/\:)~~(:/\/\/\=|>
або
</\=||:)~~(:/\/\/\=/\>
Пам'ятайте, що змусити змій поцілуватися не завжди вдасться, але все одно потрібно наблизити їх якомога ближче.
Наприклад, якщо введення було
<||=||||:)~...~(:||>
вихід може бути
</\/\=||||:)~.~(:||>
або
<||=||||:)~.~(:/\/\>
Якщо змії вже цілуються, вихід буде таким же, як і вхід. напр
<|=||:)~~(:||||>
Загалом, вихід буде таким же, як і вхідний, якщо розширення будь-якої розтягнутої частини зробить змій перекриттям. напр
<|||=|||:)~..~(:||||=|||||=||||||>
Примітки
- Приймає введення з stdin або командного рядка, як зазвичай, або записує функцію, яка займає рядок. Роздрукуйте або поверніть вихід.
- Ви можете використовувати періоди (
.
) для введення та виводу замість пробілів (), якщо вам зручніше.
- Важливо лише, щоб косої риси чергувались у послідовності вертикальних брусків, які вони замінили. Їх впорядкованість у змії взагалі чи те, що спочатку наступає нахил уперед чи назад, не має значення.
- Еластичні ділянки не можуть подовжуватися частково - це рівно подвійне або зовсім не розширення.
Оцінка балів
Це код-гольф . Виграє найкоротше подання в байтах. Тирбейкер - це відповідь раніше.
>
не стане <
і те ж, і для, (
і )
), але він також каже: "Важливо лише, щоб косої риски чергувалися в послідовності вертикальних смуг, які вони замінили. Їх впорядкування в змія в цілому, чи те, що спочатку наступає нахил вперед або назад, не має значення ".