Вступление
Вы используете Твиттер (давайте представим, если нет), где вы ограничены 140 символами на каждый твит, которым хотите поделиться со всем миром. Если вы хотите написать в Твиттере адрес Геттисберга Авраама Линкольна , то вам нужно разбить текст на несколько фрагментов по 140 символов, чтобы вывести все сообщение. Тем не менее, эти куски не всегда должны быть точно 140 символов. Скажем, к примеру, мы разбили речь на 17-символьные куски, в итоге мы получим эти твиты:
- ЧЕТЫРЕ СЧЕТА И СЕ
- ВЕН ЛЕТ НАШИ
- ОТЦЫ БЫЛИ
- ФОРТ НА ЭТОМ КОНЕ
- TINENT НОВАЯ НАТИ
- ПО ЗАЗЫВАНИЮ В Л
- (и так далее)
Это не хорошо! Когда отдельные слова разбиты, тогда может быть трудно понять, что вы пытаетесь сказать. Кроме того, в твиттере один из ваших фолловеров может столкнуться с конкретным твитом и не осознавать, что в сообщении есть что-то еще, поэтому вам нужно нумеровать свои твиты, чтобы у них был некоторый контекст для работы (все еще с использованием 17-символьных блоков ):
- (1/7) ЧЕТЫРЕ СЧЕТА И
- (2/7) СЕМЬ ЛЕТ НАЗАД
- (3/7) НАШИ ОТЦЫ
- (4/7) НАПРАВЛЕНО
- (5/7) ЭТОТ КОНТИНЕНТ А
- (6/7) НОВАЯ НАЦИЯ
- (7/7) задумано в ...
Вы можете вручную определить лучшую конфигурацию для своих твитов вручную, но для этого у нас есть компьютеры!
Вызов
В кратчайшем из возможных кодов проанализируйте адрес Геттисберга (или любой текст, но мы будем придерживаться его в качестве примера) в набор твитов, состоящий не более чем из 140 символов (предположим, ASCII, поскольку наш пример текста не должен иметь любые необычные / необычные биты в нем).
Детали
- Ваша функция / программа / и т. Д. Должна принимать один строковый аргумент и выводить одну строку текста для каждого твита.
- Предположим, что этот ввод никогда не приведет к более 99 твитам при анализе, независимо от того, как вы решите анализировать (при условии, что этот выбор по-прежнему соответствует другим пунктам испытания).
- Твиты должны включать в себя
tweet number
поtotal tweets
показателю в формате «(x/y)
» перед телом чирикать.- Этот счет займет часть вашего пространства из 140 символов!
- Части чириканья могут быть разделены только на новые строки или пробелы.
- Никакие дефисы, точки, запятые или другие знаки препинания не допускаются, за исключением случаев, когда им предшествует или предшествует пробел или перевод строки.
- Твиты должны содержать как можно больше полных слов.
- Это ограничение немного гибкое, например, когда ваш последний твит содержит только одно слово
- Это код гольф, поэтому выигрывает самый короткий код.
Полный текст Геттисберга Адрес
(Ваш код должен по-прежнему обрабатывать любую передаваемую ему строку ASCII.)
ЧЕТЫРЕ СЧЕТА И СЕМЬ ЛЕТ НАШИ НАШИ ОТЦЫ ПОЛУЧИЛИ НА ЭТОМ КОНТИНЕНТЕ НОВУЮ НАЦИЮ, СОЗДАННУЮ В СВОБОДЕ И ПОСВЯЩЕННУЮ ПРЕДЛОЖЕНИЮ, ЧТО ВСЕ МУЖЧИНЫ СОЗДАНЫ РАВНЫМИ. ТЕПЕРЬ МЫ ЗАНИМАЕМСЯ В ВЕЛИКОЙ ГРАЖДАНСКОЙ ВОЙНЕ, ИСПОЛЬЗУЮЩЕЙ, ЧТО НАЦИЯ ИЛИ ЛЮБАЯ НАЦИЯ НАСТОЯЩАЯ И ПОСВЯЩЕННАЯ МОЖЕТ ДЛИТЬ ДОЛГО. МЫ ВСТРЕТИЛИСЬ НА БОЛЬШОЙ БОРЬБЕ ЭТОЙ ВОЙНЫ. МЫ ПРИШЛИ, ЧТОБЫ ПОСВЯТИТЬ ЧАСТЬ ЭТОГО ПОЛЯ В КАЧЕСТВЕ ФИНАЛЬНОГО ОТДЫХА ДЛЯ ТОГО, КОТОРЫЙ ЗДЕСЬ ИХ ЖИВЕТ, ЧТО НАЦИЯ МОЖЕТ ЖИТЬ. ЭТО ТАКЖЕ ПОДКЛЮЧЕНИЕ И ХОРОШО, ЧТО МЫ ДОЛЖНЫ ЭТО СДЕЛАТЬ. НО В БОЛЬШОМ ЧУВСТВЕ МЫ НЕ МОЖЕМ ПОСВЯЩАТЬ, МЫ НЕ МОЖЕМ ПОСМОТРЕТЬ, МЫ НЕ МОЖЕМ ПОСЕТИТЬ, ЭТО ОСНОВАНО. Храбрые мужчины, живущие и мертвые, которые боролись здесь, оценили это далеко над нашей бедной силой, чтобы добавить или отрицать. МИР МЕНЬШЕ ЗАМЕТИТ, ЧТО НЕ ДОЛГО ПОМНИТ, ЧТО МЫ ГОВОРИМ ЗДЕСЬ, НО ЭТО НЕ МОЖЕТ ЗАБЫТЬ, ЧТО ОНИ ЗДЕСЬ ЗДЕСЬ. Для нас живая родина должна быть посвящена здесь незавершенной работе, для которой те, кто ее видел, так далеко продвинулись так далеко. НАМ НУЖНО БЫТЬ ЗДЕСЬ, ПОСВЯЩЕННЫМ ВЕЛИКОЙ ЗАДАЧЕ, ОСТАВАЮЩЕЙСЯ ДО НАС, ЧТО ОТ ЭТОГО ПОЧЕТНОГО МЕРТВА МЫ УВЕЛИЧИЛИ СВОЮ ПРИЗНАТЕЛЬНОСТЬ К ЭТОМУ ПРИЧИНЕ, ПОЧЕМУ ОНИ ПОЛУЧИЛИ ПОСЛЕДНЮЮ МЕРУ УДАЧИ, ЧТО НАМ ЕСТЬ НАСТОЯЩИЙ УМИРАЛИ В ВАЙНЕ, ЧТО ЭТА НАЦИЯ ПОД БОГОМ ИМЕЕТ НОВОЕ РОЖДЕНИЕ СВОБОДЫ, И ЧТО ПРАВИТЕЛЬСТВО ЛЮДЕЙ ЛЮДЯМИ ДЛЯ ЛЮДЕЙ НЕ ПОЙДЕТ ИЗ ЗЕМЛИ.
Ответы:
Perl, 51 персонаж
Требуется приглашение командной строки -p, включая 1 символ.
Объяснение: вставьте счетную часть до и новую строку после групп слов длиной до 132 символов. Вставьте заполнитель (
~
) для итога, который затем заменяется второй заменой. Это ломается, если сообщение содержит~
, но вместо этого можно легко использовать непечатный символ.Он чита немного: она всегда позволяет семь символов для подсчета части,
(nn/nn)
. Действительно, если это так,(n/n)
то должно быть разрешено два дополнительных символа. Тем не менее, произвольное решение этого значительно усложнит задачу.источник
\G
здесь бесполезно, не так ли?Питон, 140
^ 140 символов было на самом деле совпадением.
Пока остаются слова, решение создаст новые твиты из списка слов и добавит их в список. Для каждого твита он будет пытаться добавлять слова, пока его длина не превысит 140 символов. Два символа зарезервированы для
total tweets
, которые заполняются позже при печати каждого твита в списке.Пример вывода:
источник
Рубин, 77 знаков
Упакуйте логику в одно регулярное выражение. Выход
f[text]
:источник
Руби, 75
Не может победить Perl, но, по крайней мере, он немного превосходит другое решение Ruby. Обратите внимание, что он печатает твиты в обратном порядке (проблема не указывает один).
источник
VBA, 251
Пробовал другой метод ... Не так хорошо, как мой оригинал, но я все еще работаю над этим ...
Выходы:
источник
BASH (88 символов)
Сложите строку на 132 символа (чтобы учесть количество твитов), на пробелах (
-s
), читайте текст в обратном направлении (tac), нумеруйте текст (cat -n
), реверсируйте (tac
). Внутри Awk: Первая строка (NR == 1), присвойте букве «a» значение в первой. Пустой номер столбца. Напечатайте (NR / 'a') затем строку.Выход:
источник
Javascript (только для FF), 92 символа
Отформатированный, это плагиат скрипта Perl:
источник
VBA, 227
Выходы:
источник
Javascript (только для FF), 135 символов
Отформатированный, это:
источник
PHP, 233
Правильно ли я считаю, что это первый ответ, который не изменяет счетной части?
(Это также работает с более чем 99 твитами; я мог бы сбрить еще два байта, если бы разрешил бесконечный цикл в этом случае.)
ungolfed:
источник