Святі війни воювали на просторах проти вкладок. (І звичайно простори, будучи об'єктивно перевершеними, виграли.) - Олексій А.
S Ом ЙОГО р ля до сих пір відмовляється , щоб в ccept , що бея з ч сл е Арлі евим upreme. Ви тільки що отримали в файл , використовуючи Інкор ре кт, б оголошення і інф е RIOR форму беї т Espace, і тепер т ситеме прода й НТ файлу р е зіпсований і розореним.
Ви вирішите, що можете також показати людині, яка надіслала вам файл, наскільки вони помиляються - жорстоко.
Опис
Як випливає з назви, ваше завдання полягає в тому, щоб взяти файл, який містить одну або кілька вкладок:
this is an evil tab onoes
і нещадно розбивати їх на шматки:
this is an evil tab
o
n
o
e
s
Зауважте, що програмне забезпечення Stack Exchange перетворює буквальні вкладки на чотири пробіли (тому що це правильно), тому вкладки в цій публікації відображатимуться як чотири пробіли. Однак вхід до вашої програми буде містити фактичні вкладки.
Виклик
Рішення повинно використовувати як вхід один рядок, який може містити ASCII, нові рядки та вкладки для друку. На вході завжди буде хоча б одна вкладка.
Вихід повинен бути одним і тим же рядком із застосуванням наступних правил:
Запустіть курсор по координатах (0,0) та в напрямку вправо. Координати - це (стовпець, рядок), нульове індексування, а напрямок - в який спосіб слід перемістити курсор після друку символу.
Для кожного символу в рядку:
Якщо це новий рядок, перейдіть до координат (0, n), де n - кількість нових рядків у рядку до цього часу (включаючи цей) та скиньте напрямок вправо.
Якщо це вкладка, виведіть два пробіли, оберніть напрямок курсору на 90 градусів за годинниковою стрілкою та виведіть ще два пробіли, ефективно «розбивши» вкладку навпіл. Ось наочний приклад, де вкладка представлена як,
--->
а пробіли як·
:foo--->bar--->baz
стає
foo··· · b a r · · zab··
В іншому випадку просто виведіть символ на курсор і перемістіть курсор на один крок у поточному напрямку.
Оскільки ви читаєте рядок від початку до кінця, можливо, вам доведеться писати «зверху» існуючих символів - це нормально. Наприклад, вхід
foo--->bar
spaces are superior
має призвести до виходу
foo
b
spaces are superior
r
Ви можете вибрати, чи повинні "зламані вкладки" переписувати інші символи - початковий намір полягав у тому, що вони цього не роблять, але специфікація була неоднозначною, тому це ваше рішення.
Крім того, після застосування цих правил ви також можете
додайте або видаліть стільки пробілів, скільки ви хочете.
додати максимум одного зворотного нового рядка.
Вхід ніколи не буде містити пробіли; він також ніколи не буде містити провідні чи зворотні нові рядки. Ви також можете завжди припускати, що вам ніколи не потрібно буде писати в стовпець або рядок менше 0 (тобто поза екраном).
Тестовий випадок
Вкладки в цьому тестовому випадку представлені так, --->
тому що в іншому випадку SE збиває їх.
Вхід:
Test case. Here's a tab--->there's a tab--->everywhere a tab--->tab--->this is some more text
blah
blah
blah blah blah blah blah blah--->blaah--->blaah--->blah--->blaaaaah--->blah--->blah--->blah--->blah--->blah
Вихід:
Test case. Here's a tab
blah
blah t
blah blah blah blah blah blah
blaablah
r b
e l b
h 'h a l
a sa a a
l l h h
this is some mobe tbxt
haalhalb
b a
a b
t
bat a erehwyreve
Фантастична анімація:
Правила
- Це код-гольф , тому найкоротший код у байтах виграє!
(0,0)
, ви маєте на увазі, що нам потрібно спочатку очистити консоль, чи ви просто маєте на увазі позицію курсора за цим типом?