разделенная строка текста - PullRequest
2 голосов
/ 15 мая 2010

Мне было интересно, есть ли алгоритм разбить линию на несколько строк, чтобы результирующий набор из нескольких линий соответствовал квадратной форме, а не широкой прямоугольной форме. Позвольте мне привести несколько примеров,

Входной сигнал: Привет, это действительно длинная очередь.

Выход:
Привет, это
действительно
длинная линия

Input: а б в г е е

Выход:
а б в
д е ф

Входной сигнал: Это действительно такая чертова линия. Это конец.

Выход:
Это действительно такой
looooooooooooooooooooong
линия Это конец.

Если вы видите в приведенных выше примерах, строка ввода вписывается в широкий прямоугольник. Но результат более или менее соответствует квадратной форме.

По сути, здесь нужно просто посчитать количество символов в строке и взять квадратный корень из этого числа. Затем поместите квадратное число символов в каждой строке. Но в приведенном выше примере разделение должно выполняться с учетом переносов слов вместо символов. Есть ли стандартный алгоритм для этого? Любые примеры кода / указатели будут оценены!

1 Ответ

2 голосов
/ 15 мая 2010

Как вы заметили, это в основном означает разрыв линий с минимальной и максимальной шириной, а не с максимальной шириной, как это обычно делается. (И ваш пример показывает, что это не всегда возможно, если вы не можете переносить слова.) TeX может сделать это (посмотрите на команду \parshape): его алгоритм переноса строк поддерживает произвольные формы (и переносы тоже), и считается современным. Поэтому, если вы хотите создать квадраты любым серьезным способом, вам определенно следует адаптировать алгоритм Кнута / Пласса (http://defoe.sourceforge.net/folio/knuth-plass.html).

).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...