Аліса - стажер у компанії, яка використовує Brainfuck як основну мову як для розвитку клієнта, так і для сервера. Аліса щойно написала свій перший код, і вона трохи нервує, коли готується до свого першого перегляду коду.
Аліса хоче зробити свій код правильно відформатованим і виглядати приємно, але у неї немає часу читати посібник зі стилю коду на 328 сторінках компанії, тому вона вирішила відформатувати його як ідеальний квадрат . На жаль, довжина коду може бути недостатньою для формування квадрата, тому вона вирішила залишити прямокутний зазор посередині. Зазори повинні бути ідеально центрировані та максимально наближені до квадрата .
Приклади
++++++ +++++ +++++ +++++ +++++ +++++
++++++ +++++ +++++ + ++ ++ ++ +++++
++++++ ++ ++ + + + ++ + +
++++++ +++++ +++++ +++++ ++ ++ +++++
++++++ +++++ +++++ +++++ +++++ +++++
Perfect OK Acceptable Unacceptable No way! Nope.
Напишіть програму або функцію, щоб допомогти Алісі. Враховуючи код Аліси як вхідний рядок, виведіть належним чином відформатований код, як описано нижче, якщо можливо. Якщо форматування неможливо, виведіть смайли плачу :~(
.
Це кодовий гольф, тому відповіді набираються в байтах, меншою кількістю байтів яких є.
Обмеження
- Ваша програма або функція повинна приймати один рядок як вхід і вихід одного або декількох рядків тексту (або повертати багаторядковий рядок або масив рядків, якщо ви реалізуєте функцію).
- Рядок введення може містити будь-які символи ASCII, включаючи пробіли.
- Усі пробіли у введенні повинні ігноруватися. Вони не повинні розраховувати довжину коду, і їх не слід використовувати у висновку.
- Рядок введення містить щонайменше один непробільний символ.
- Форматований код повинен мати ті самі символи, які не пробілюються, у тому ж порядку, що і у вхідному коді.
- Форматований код повинен бути ідеальним квадратом, тобто всі рядки повинні мати однакову довжину, а кількість рядків має бути рівним довжині рядків.
- Форматований код може містити пробіл посередині.
- У проміжку можуть використовуватися лише символи пробілу (ASCII код 32).
- Зазор (якщо він присутній) повинен бути прямокутним.
- Кожен рядок відформатованого коду повинен містити щонайменше один непробільний символ, тобто ширина зазору повинна бути строго меншою за ширину квадрата (проміжок 5х1 неприйнятний для 5х5 квадрата).
- Зазор повинен бути горизонтальним, тобто ширина зазору повинна бути більшою або дорівнює висоті зазору.
- Розрив повинен бути ідеально центрованим.
- Отже, паритет ширини зазору та висоти повинні бути такими ж, як і парність у ширині квадрата (наприклад, для квадратного зазору 5x5 може бути 1x1, 3x1 або 3x3).
- Якщо можливо, виведіть квадрат без розриву.
- У випадку декількох рішень виберіть одне з зазором, найближчим до квадрата, тобто різниця між шириною зазору та висотою зазору мінімальна (наприклад: зазор 10x10 є кращим, ніж 8x6, а 8x6 - більш переважним, ніж 6x2).
- Якщо все-таки є краватка, вибирайте рішення з мінімальною площею зазору (наприклад, зазор 2x2 є кращим, ніж 4x4).
- Якщо форматування коду взагалі неможливо, виведіть
:~(
. - Новий рядок після останнього рядка необов’язковий.
- [Новий] Ви можете сміливо припускати, що будь-який символ з кодом нижче 33 є пробілом. Я сподіваюся, що це допоможе тобі в гольфі.
Тести
Input Output Code length Comment
+++++++++ +++ 9 Alice is lucky,
+++ her code perfectly fits a square.
+++
++++++++ +++ 8 Though code length isn't enough for a square,
+ + a small gap fixes it.
+++
++++++ :~( 6 No luck, code cannot be formatted.
Hello, Hell 12 Input may contain any ASCII characters,
World! o , but whitespaces in input should be ignored.
W o
rld!
+++++ + +++++ +++++ 22 Gap is not required to be a square,
+++++ + +++++ +++++ it can be a rectangle.
+ +
+++++
+++++
+++ + +++ ++++++++ 28 There exists another solution:
+++ + +++ + + 6x6 square with 4x2 gap,
+++ + +++ + + but in Alice's opinion square gap
+++ + +++ + + makes code more readable.
+ +
+ +
+ +
++++++++
Хитрі випробування
This must be Thism 24 7x7 with 5x5 gap looks good,
5x5 with 1x1 ustbe but 5x5 with 1x1 gap is better,
gap. 5x 5w because gap area is smaller.
ith1x
1gap.
+++ +++ +++ :~( 18 In case you tried 5x5 square
+++ +++ +++ with 7x1 gap ;)
Ресурси
Для економії місця ви можете знайти зразок коду та додаткові тестові випадки на tio.run
[Новий] Ви можете подивитися таблицю прийнятих рішень для введення до 100 символів . Я змінив ширину та висоту, тому що це, здається, виглядає більш інтуїтивно.
Натхненний: квадрат тексту
Зміни
Додано 2 тести, виправлена помилка у зразковому коді.
Додано таблицю рішень до 100, додано прояснення пробілу.