Кто-то поспешно складывал рождественские подарки, и это довольно беспорядок:
========================
| |
========================
=============
| |
| |
| |
| |
| |
| |
=============
=======
| |
| |
| |
=======
===================
| |
| |
| |
===================
=================
| |
| |
| |
| |
=================
=======
| |
| |
=======
Как, если серьезно, как эта вершина представляет даже баланс. Это, вероятно, молоток. Чтобы эта башня подарков не рухнула, вы должны переупорядочить подарки так, чтобы они красиво складывались:
=======
| |
| |
=======
=======
| |
| |
| |
=======
=============
| |
| |
| |
| |
| |
| |
=============
=================
| |
| |
| |
| |
=================
===================
| |
| |
| |
===================
========================
| |
========================
Правила
- Каждый подарок состоит из верха и низа
=
символов и одного или нескольких средних рядов, состоящих из двух|
разделенных пробелами. Ширина подарка одинакова во всех его рядах. - Там нет пустых строк.
- Последовательные подарки будут перекрываться как минимум в одном столбце.
- Подарки должны быть сложены в порядке уменьшения ширины. В случае галстука, более высокий подарок должен идти ниже более плоского подарка.
- Подарки должны быть сосредоточены на настоящем внизу. Если подарок не может быть размещен точно в центре (потому что разница в ширине нечетна), вы можете выбрать любую позицию, которая находится на половину символа от центра.
- Вы можете или не можете предполагать, что ввод содержит один завершающий символ новой строки, но, пожалуйста, изложите свое предположение.
- Ваше решение не должно работать для пустого ввода, но должно быть в состоянии обработать один подарок.
- Вы можете написать программу или функцию, которая принимает входные данные через STDIN или аргумент функции и возвращает результат или печатает его в STDOUT.
- Это код гольф, поэтому самый короткий ответ (в байтах) выигрывает.
Japt , 18 байт
Попробуйте онлайн!
Я использую достаточно отличную стратегию от другого ответа Япта, который, как я думал, стоил своего собственного ответа. Принимает ввод и вывод в виде массива строк
Объяснение:
Я не знаю точно, почему «сортировка по умолчанию» работает таким образом, но я проверил, что более высокое поле из двух с одинаковой шириной находится внизу, независимо от того, что находится на входе первым.
источник
"=="
на,'=²
чтобы сохранить байт.Руби, 164
Аккуратный вызов! Не мог получить это намного дальше.
объяснение
Входные данные
String
разделены наArray
элементы, где каждый подарок является элементом. Затем массив сортируется по количеству символов канала и снова сортируется по количеству знаков равенства.Затем он удаляет все начальные пробелы и печатает каждую строку отдельно, центрируясь по ширине самого большого подарка.
Он ведет себя одинаково с завершающим переводом строки на входе или без него.
Читаемая версия
источник
05AB1E ,
2320 байт-3 байта благодаря @ErikTheOutgolfer .
Попробуйте онлайн.
Объяснение:
Заметки:
c
в верхнемC
.|
может быть отброшен, если нам разрешено принимать входные данные в виде списка строк.|
любом случае удаляют их.источник
ðδÛ
может использоваться вместоεðÛ}
здесь, так¶'=.ø
же, как…=\n=
(\n
означает перевод строки), так0'=.ø
же, как…=0=
..ø
вместо буквенных 3-х символьных строк ... И спасибо заðδÛ
. На самом деле никогда не использовалδ
раньше и понятия не имел, что это работает так.Атташе , 91 байт
Попробуйте онлайн!
Ungolfed
источник
Perl 5
-n0
, 123 байтаПопробуйте онлайн!
источник
Python 2 ,
221196 байтПопробуйте онлайн!
Ожидает заключенную в кавычки строку без завершающих строк в качестве входных данных.
Не здорово, но это лучшее, что я могу сделать.
источник
Japt ,
232019 байтПодобный подход к решению Кевина . Первый байт может быть удален, если мы можем принять входные данные как массив строк.
Попытайся
источник
Я новичок в код-гольфе, а не эксперт в javascript, но задача интересная и веселая. Я хотел бы посмотреть, какие хитрости использовал бы настоящий специалист по js.
Предположения
Код
Вход находится в
g[]
. Выход вm[]
.Код работает
построение массива объектов, каждый из которых представляет один блок, с двумя членами: K, ключ сортировки (ширина x 100 + высота) и O, массив (обрезанных) строк, составляющих блок. При построении массива код запоминает ширину самого широкого поля.
Массив блоков-блоков сортируется в порядке по ключу K. Если блоки имеют одинаковую ширину, ключ обеспечивает их сортировку по высоте.
После сортировки блоков строки для каждого блока помещаются в выходной массив с добавлением начальных пробелов, которые размещают блок по центру над самым широким.
Попробуйте онлайн!
источник