Поле ASCII виглядає так:
++ +---+ +------+ +---+ +---+
++ | | | | | | | |
| | | | | | | |
+-+ | | | | | | | |
+-+ | | | | | | +---+
+---+ | | | |
+--+ | | | | ++
| | | | | | ||
| | +------+ | | ||
+--+ | | ||
+---+ ||
||
+-----+ ||
+------------+ | | ++
| | | |
| | | |
+------------+ +-----+
Ось кілька прикладів тих самих ящиків ASCII, які вбудовані:
++ +- -+ +- -+ +- -+ +- -+
++ | - | | - - | | - | | - |
| | | -- | | | | |
+-+ | | | | " | - |
+-+ | - | || | | +- -+
+- -+ | | | |
+--+ | -- | | | ++
| | | - - | " ||
| | +- -+ | | ||
+--+ | - | | |
+- -+ | |
-- ||
- - +- -+ ||
+- - - -+ | - - | ++
| -- -- | | = |
| -- -- | | - - |
+- - - -+ +- -+
- -
--
Ось посилання на всі ці скриньки тестів у легшому для копіювання форматі. Порядок - це всі входи з подальшим результатом у тому ж порядку.
Ваша мета - взяти вікно ASCII в якості вхідного даних і повернути імплодоване поле. Правила імплозії:
- "+" ніколи не змінюється; ні "-", ні "|" безпосередньо поруч із "+"
- Починаючи з кутів, "-" та "|" переміщення всередину на один пробіл більше, ніж той самий символ ближче до кута. Якщо "-" і "|" ніколи не переїхав би на одне і те ж місце, ані ходи.
- Якщо "-" і "-" переміститися на одне місце, поставте "=" у цьому місці. Якщо "|" та "|" перемістіться на те саме місце, поставте "в цьому місці". Вони вважаються двома їх відповідними символами в тому ж місці, що рухаються в протилежних напрямках.
- Два "-" або два "|" може рухатися повз один одного, як видно з нижнього лівого прикладу.
- Якщо ящик досить худий, він почне розширюватися назовні таким же чином, завжди віддаляючись від тієї сторони, з якої почав працювати.
- Результат повинен бути симетричним по лінії центра в обох напрямках x та y (ігноруючи нові рядки); сюди входять пробіли, тому результат, можливо, знадобиться прокласти пробілами, щоб задовольнити це.
Деталі правила:
- Це код-гольф, тому найкоротша програма в байтах виграє.
- Застосовуються стандартні лазівки.
- Ви можете припустити, що кожний рядок закінчується символом нового рядка.
- Єдиними символами у вхідному рядку будуть "+", "-", "|", "" і "\ n" (новий рядок), і ваш вихідний рядок повинен відповідати тим же правилам, додаючи "=" та "як можливі символи.
- Можливо, ви можете мати одну кінцеву нову лінію в кінці останнього рядка.
- Найменший вікно ASCII, з яким потрібно звертатися, - приклад у верхньому лівому куті. Кожне поле ASCII матиме рівно 4 "+" s, точно в його кутах.
- Вам потрібно буде обробити поля розміром
m x n
для будь-яких цілих чисел,m,n
таких як2<=m,n<256
(найбільший можливий розмір рядка255*(255+1)
) - Можна припустити, що ви завжди отримаєте одне дійсне поле ASCII як вхід.
||
в цьому прикладі, має бути "
щось чи щось ...
"
? Я здогадуюсь, що "
з'являється лише на 3-х ширших або більших розмірах?
"
піти? З лівого чи з правого боку? Це не може бути обом, але не може бути і тим, що результат симетричний.