Деякі люди наполягають на використанні пробілів для підрахунку та відступу.
Для табуляції це безперечно неправильно. За визначенням для складання табуляції потрібно використовувати табулятори.
Навіть для відступу табличні пристрої об'єктивно переважають:
У спільноті Stack Exchange чіткий консенсус .
Використання єдиного простору для відступу візуально неприємно; використання декількох є марним.
Оскільки весь тріск
х гольфERS знати, програми повинні бути якомога коротше. Це не тільки економить простір на жорсткому диску, але й час компіляції скорочується, якщо потрібно обробити менше байтів.Регулюючи ширину вкладки 1 , один і той же файл виглядає по-різному на кожному комп’ютері, тому кожен може використовувати свою улюблену ширину відступу без зміни фактичного файлу.
Усі хороші текстові редактори за замовчуванням (і визначенням) використовують табулятори.
Я так кажу і завжди маю рацію!
На жаль, не всі слухають розуму. Хтось надіслав вам файл, який робить це неправильно TM, і ви повинні його виправити. Ви можете просто зробити це вручну, але будуть і інші.
Досить погано, що розпірки витрачають дорогоцінний час, тому ви вирішили написати найкоротшу програму, щоб вирішити проблему.
Завдання
Напишіть програму або функцію, яка виконує такі дії:
Прочитайте один рядок або з STDIN, або як аргумент командного рядка або функції.
Визначте всі місця, де пробіли використовувались для підрахунку чи відступу.
Пробіг пробілів - це відступ, якщо він відбувається на початку рядка.
Пробіг з двох або більше пробілів - це табуляція, якщо це не відступ.
Єдине простір , яка не відступ може або не може бути використано для підведення підсумків. Як і очікувалося, коли ви використовуєте один і той же символ для різних цілей, немає простого способу сказати це. Тому ми скажемо, що простір було використано для плутанини .
Визначте найдовшу можливу ширину вкладки 1, для якої всі пробіли, використані для складання та відступу, можна замінити табуляторами, не змінюючи зовнішній вигляд файлу.
Якщо вхід не містить ні табуляції, ні відступів, визначити ширину вкладки неможливо. У цьому випадку пропустіть наступний крок.
Використовуючи попередньо визначену ширину вкладок, замініть усі пробіли, які використовуються для складання та відступу, таблицями.
Крім того, коли це можливо, не змінюючи зовнішній вигляд файлу, замініть усі пробіли, які використовуються для плутанини, таблицями. (Якщо ви сумніваєтеся, позбудьтесь пробілів.)
Поверніть модифікований рядок зі своєї функції або надрукуйте його в STDOUT.
Приклади
Всі простори
a bc def ghij
складають табуляцію.
Кожен пробіл пробілів прошиває попередній рядок непробільних символів на ширину 5, тому правильна ширина вкладки дорівнює 5, а правильний вихід 2 -
a--->bc-->def->ghij
Перші два простори
ab cde f ghi jk lm
табуляція, інші плутанина.
Правильна ширина вкладки 4, так що правильний вихід 2 є
ab->cde>f ghi>jk lm
Останній пробіл залишається недоторканим, оскільки він буде представлений у вигляді двох пробілів, якщо його замінити на таблицю:
ab->cde>f ghi>jk->lm
Усі, крім одного простору
int main( ) { puts("TABS!"); }
є відступ, інше - плутанина.
Рівні відступів становлять 0, 4 та 8 пробілів, тому правильна ширина вкладки - 4, а правильний вихід 2 -
int --->main( ) --->{ --->--->puts("TABS!"); --->}
Простір у
( )
буде надано у вигляді трьох пробілів, якщо його замінити на таблицю, тож він залишиться недоторканим.Перші два простори
x yz w
є відступ, інші плутанина.
Належна ширина вкладки 2 і правильний вихід 2 є
->x>yz w
Останній пробіл буде відображений у вигляді двох пробілів, якщо його замінити на таблицю, тож він залишиться недоторканим.
Перші два простори
xy zw
є відступом, інші три - підрахунком.
Лише ширина вкладки 1 дозволяє усунути всі пробіли, тому правильний вихід 2 є
>>xy>>>zw
Всі простори
a b c d
є плутанина.
Там немає довгої можливої ширини вкладки, так що правильний вихід 2 є
a b c d
Додаткові правила
Вхід повністю буде складатися з друкованих символів ASCII та рядків рядків.
Ви можете припустити, що на максимум 100 рядків тексту і не більше 100 символів.
Якщо ви виберете STDOUT для виводу, ви можете надрукувати один зворотний канал.
Діють стандартні правила гольф-коду .
1 Ширина вкладки визначається як відстань у символах між двома послідовними зупинками вкладки , використовуючи односхилий шрифт.
2 Стрілки мистецтва ASCII представляють табулятори, які Stack Exchange відмовляється візуалізувати належним чином, для чого я надіслав звіт про помилку. Фактичний вихід повинен містити фактичні табулятори.
programs should be as short as possible
Я вірю, що знайшов давно загубленого брата Артура Вітні !!