Алиса - стажер в компании, которая использует Brainfuck в качестве основного языка как для разработки на стороне клиента, так и на стороне сервера. Алиса только что написала свой первый код, и она немного нервничает, готовясь к своему первому обзору кода.
Алиса хочет, чтобы ее код был правильно отформатирован и выглядел красиво, но у нее нет времени, чтобы прочитать руководство по стилю кода компании на 328 страниц, поэтому она решила отформатировать его как идеальный квадрат . Увы, длины кода может быть недостаточно для формирования квадрата, поэтому она решила оставить прямоугольный пробел в середине. Разрывы должны быть идеально отцентрированы и как можно ближе к квадрату .
Примеры
++++++ +++++ +++++ +++++ +++++ +++++
++++++ +++++ +++++ + ++ ++ ++ +++++
++++++ ++ ++ + + + ++ + +
++++++ +++++ +++++ +++++ ++ ++ +++++
++++++ +++++ +++++ +++++ +++++ +++++
Perfect OK Acceptable Unacceptable No way! Nope.
Напишите программу или функцию, чтобы помочь Алисе. Учитывая код Алисы в качестве входной строки, выведите правильно отформатированный код, как описано ниже, если это возможно. Если форматирование невозможно, выведите плачущие смайлики :~(
.
Это код-гольф, поэтому ответы оцениваются в байтах, а целью является меньшее количество байтов.
Ограничения
- Ваша программа или функция должна принимать одну строку в качестве входных данных и выводить одну или несколько строк текста (или возвращать многострочную строку или массив строк, если вы реализуете функцию).
- Входная строка может содержать любые символы ASCII, включая пробелы.
- Все пробелы во входных данных должны игнорироваться. Они не должны учитывать длину кода и не должны использоваться в выводе.
- Входная строка содержит хотя бы один непробельный символ.
- Отформатированный код должен иметь те же непробельные символы в том же порядке, что и во входном коде.
- Форматированный код должен быть идеальным квадратом, то есть все строки должны иметь одинаковую длину, а количество строк должно быть равно длине строк.
- Отформатированный код может содержать пробел в середине.
- В пробеле можно использовать только пробелы (код ASCII 32).
- Разрыв (если имеется) должен быть прямоугольным.
- Каждая строка отформатированного кода должна содержать хотя бы один непробельный символ, т.е. ширина зазора должна быть строго меньше ширины квадрата (зазор 5x1 недопустим для квадрата 5x5).
- Зазор должен быть горизонтальным, то есть ширина зазора должна быть больше или равна высоте зазора.
- Разрыв должен быть идеально отцентрирован.
- Следовательно, четность ширины и высоты зазора должна быть такой же, как четность ширины квадрата (например, для зазора 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, добавлено уточнение пробелов.