Создать Твиттер Парсер

14

Вступление

Вы используете Твиттер (давайте представим, если нет), где вы ограничены 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.)

ЧЕТЫРЕ СЧЕТА И СЕМЬ ЛЕТ НАШИ НАШИ ОТЦЫ ПОЛУЧИЛИ НА ЭТОМ КОНТИНЕНТЕ НОВУЮ НАЦИЮ, СОЗДАННУЮ В СВОБОДЕ И ПОСВЯЩЕННУЮ ПРЕДЛОЖЕНИЮ, ЧТО ВСЕ МУЖЧИНЫ СОЗДАНЫ РАВНЫМИ. ТЕПЕРЬ МЫ ЗАНИМАЕМСЯ В ВЕЛИКОЙ ГРАЖДАНСКОЙ ВОЙНЕ, ИСПОЛЬЗУЮЩЕЙ, ЧТО НАЦИЯ ИЛИ ЛЮБАЯ НАЦИЯ НАСТОЯЩАЯ И ПОСВЯЩЕННАЯ МОЖЕТ ДЛИТЬ ДОЛГО. МЫ ВСТРЕТИЛИСЬ НА БОЛЬШОЙ БОРЬБЕ ЭТОЙ ВОЙНЫ. МЫ ПРИШЛИ, ЧТОБЫ ПОСВЯТИТЬ ЧАСТЬ ЭТОГО ПОЛЯ В КАЧЕСТВЕ ФИНАЛЬНОГО ОТДЫХА ДЛЯ ТОГО, КОТОРЫЙ ЗДЕСЬ ИХ ЖИВЕТ, ЧТО НАЦИЯ МОЖЕТ ЖИТЬ. ЭТО ТАКЖЕ ПОДКЛЮЧЕНИЕ И ХОРОШО, ЧТО МЫ ДОЛЖНЫ ЭТО СДЕЛАТЬ. НО В БОЛЬШОМ ЧУВСТВЕ МЫ НЕ МОЖЕМ ПОСВЯЩАТЬ, МЫ НЕ МОЖЕМ ПОСМОТРЕТЬ, МЫ НЕ МОЖЕМ ПОСЕТИТЬ, ЭТО ОСНОВАНО. Храбрые мужчины, живущие и мертвые, которые боролись здесь, оценили это далеко над нашей бедной силой, чтобы добавить или отрицать. МИР МЕНЬШЕ ЗАМЕТИТ, ЧТО НЕ ДОЛГО ПОМНИТ, ЧТО МЫ ГОВОРИМ ЗДЕСЬ, НО ЭТО НЕ МОЖЕТ ЗАБЫТЬ, ЧТО ОНИ ЗДЕСЬ ЗДЕСЬ. Для нас живая родина должна быть посвящена здесь незавершенной работе, для которой те, кто ее видел, так далеко продвинулись так далеко. НАМ НУЖНО БЫТЬ ЗДЕСЬ, ПОСВЯЩЕННЫМ ВЕЛИКОЙ ЗАДАЧЕ, ОСТАВАЮЩЕЙСЯ ДО НАС, ЧТО ОТ ЭТОГО ПОЧЕТНОГО МЕРТВА МЫ УВЕЛИЧИЛИ СВОЮ ПРИЗНАТЕЛЬНОСТЬ К ЭТОМУ ПРИЧИНЕ, ПОЧЕМУ ОНИ ПОЛУЧИЛИ ПОСЛЕДНЮЮ МЕРУ УДАЧИ, ЧТО НАМ ЕСТЬ НАСТОЯЩИЙ УМИРАЛИ В ВАЙНЕ, ЧТО ЭТА НАЦИЯ ПОД БОГОМ ИМЕЕТ НОВОЕ РОЖДЕНИЕ СВОБОДЫ, И ЧТО ПРАВИТЕЛЬСТВО ЛЮДЕЙ ЛЮДЯМИ ДЛЯ ЛЮДЕЙ НЕ ПОЙДЕТ ИЗ ЗЕМЛИ.

Gaffi
источник
В твоих примерах твиты, вы сломали слова - но в правилах вы говорите, что нет. Пожалуйста, сделайте это согласованным - либо измените правила, либо приведите примеры.
Boothby
@boothby Ну, например, чтобы показать, что запрещено, я посмотрю, не могу ли я это переформулировать.
Gaffi
Пожалуйста, уточните вопрос, чтобы уточнить, должны ли ответы иметь дело с возможностью пересчета слов -> упаковок твитов из-за (X / Y) части. Это значительно усложняет задачу и вводит ограничение на наибольшее сообщение, которое можно передать без кодирования данных в (X / Y) части.
arrdem
@rmckenzie Извини, не уверен, что я тебя достану? Вы хотите объяснить тот факт, что вы можете иметь более 100 твитов в наборе?
Гаффи
@Gaffi - Да, существует ли максимальное количество частей, на которые будут разделены наши сообщения (в каких случаях могут быть сделаны предположения и действителен sol grc), или мы должны поддерживать общий случай, такой как сериализация многотысячного слова на твит, который предлагает ваша постановка проблемы как есть.
arrdem

Ответы:

12

Perl, 51 персонаж

s#\G(.{1,132})(\s+|$)#(${\++$a}/~) $1\n#g;s#~#$a#g

Требуется приглашение командной строки -p, включая 1 символ.

Объяснение: вставьте счетную часть до и новую строку после групп слов длиной до 132 символов. Вставьте заполнитель ( ~) для итога, который затем заменяется второй заменой. Это ломается, если сообщение содержит ~, но вместо этого можно легко использовать непечатный символ.

Он чита немного: она всегда позволяет семь символов для подсчета части, (nn/nn). Действительно, если это так, (n/n)то должно быть разрешено два дополнительных символа. Тем не менее, произвольное решение этого значительно усложнит задачу.


источник
\Gздесь бесполезно, не так ли?
user2846289
26

Питон, 140

^ 140 символов было на самом деле совпадением.

def f(s):
 s=s.split();i=0;l=[]
 while s:
  i+=1;t='(%d/%%d)'%i
  while s and len(t+s[0])<140:t+=' '+s.pop(0)
  l+=[t]
 for t in l:print t%i

Пока остаются слова, решение создаст новые твиты из списка слов и добавит их в список. Для каждого твита он будет пытаться добавлять слова, пока его длина не превысит 140 символов. Два символа зарезервированы для total tweets, которые заполняются позже при печати каждого твита в списке.

Пример вывода:

(1/11) FOUR SCORE AND SEVEN YEARS AGO OUR FATHERS BROUGHT FORTH ON THIS CONTINENT A NEW NATION CONCEIVED IN LIBERTY AND DEDICATED TO THE
(2/11) PROPOSITION THAT ALL MEN ARE CREATED EQUAL. NOW WE ARE ENGAGED IN A GREAT CIVIL WAR TESTING WHETHER THAT NATION OR ANY NATION SO
(3/11) CONCEIVED AND SO DEDICATED CAN LONG ENDURE. WE ARE MET ON A GREAT BATTLEFIELD OF THAT WAR. WE HAVE COME TO DEDICATE A PORTION OF THAT
(4/11) FIELD AS A FINAL RESTING PLACE FOR THOSE WHO HERE GAVE THEIR LIVES THAT THAT NATION MIGHT LIVE. IT IS ALTOGETHER FITTING AND PROPER
(5/11) THAT WE SHOULD DO THIS. BUT IN A LARGER SENSE WE CAN NOT DEDICATE, WE CAN NOT CONSECRATE, WE CAN NOT HALLOW, THIS GROUND. THE BRAVE
(6/11) MEN LIVING AND DEAD WHO STRUGGLED HERE HAVE CONSECRATED IT FAR ABOVE OUR POOR POWER TO ADD OR DETRACT. THE WORLD WILL LITTLE NOTE NOR
(7/11) LONG REMEMBER WHAT WE SAY HERE BUT IT CAN NEVER FORGET WHAT THEY DID HERE. IT IS FOR US THE LIVING RATHER TO BE DEDICATED HERE TO THE
(8/11) UNFINISHED WORK WHICH THEY WHO FOUGHT HERE HAVE THUS FAR SO NOBLY ADVANCED. IT IS RATHER FOR US TO BE HERE DEDICATED TO THE GREAT
(9/11) TASK REMAINING BEFORE US, THAT FROM THESE HONORED DEAD WE TAKE INCREASED DEVOTION TO THAT CAUSE FOR WHICH THEY GAVE THE LAST FULL
(10/11) MEASURE OF DEVOTION, THAT WE HERE HIGHLY RESOLVE THAT THESE DEAD SHALL NOT HAVE DIED IN VAIN, THAT THIS NATION UNDER GOD SHALL HAVE
(11/11) A NEW BIRTH OF FREEDOM, AND THAT GOVERNMENT OF THE PEOPLE BY THE PEOPLE FOR THE PEOPLE SHALL NOT PERISH FROM THE EARTH.
GRC
источник
Это было именно то, что мне было нужно. Это решение круто. Спасибо @grc
iChux
7

Рубин, 77 знаков

f=->t{i=0;$><<t.gsub(/(.{1,132})([ \n]|$)/m){"(#{i+=1}/%{i}) #{$1}\n"}%{i:i}}

Упакуйте логику в одно регулярное выражение. Выход f[text]:

(1/11) FOUR SCORE AND SEVEN YEARS AGO OUR FATHERS BROUGHT FORTH ON THIS CONTINENT A NEW NATION CONCEIVED IN LIBERTY AND DEDICATED TO THE
(2/11) PROPOSITION THAT ALL MEN ARE CREATED EQUAL. NOW WE ARE ENGAGED IN A GREAT CIVIL WAR TESTING WHETHER THAT NATION OR ANY NATION SO
(3/11) CONCEIVED AND SO DEDICATED CAN LONG ENDURE. WE ARE MET ON A GREAT BATTLEFIELD OF THAT WAR. WE HAVE COME TO DEDICATE A PORTION OF
(4/11) THAT FIELD AS A FINAL RESTING PLACE FOR THOSE WHO HERE GAVE THEIR LIVES THAT THAT NATION MIGHT LIVE. IT IS ALTOGETHER FITTING AND
(5/11) PROPER THAT WE SHOULD DO THIS. BUT IN A LARGER SENSE WE CAN NOT DEDICATE, WE CAN NOT CONSECRATE, WE CAN NOT HALLOW, THIS GROUND. THE
(6/11) BRAVE MEN LIVING AND DEAD WHO STRUGGLED HERE HAVE CONSECRATED IT FAR ABOVE OUR POOR POWER TO ADD OR DETRACT. THE WORLD WILL LITTLE
(7/11) NOTE NOR LONG REMEMBER WHAT WE SAY HERE BUT IT CAN NEVER FORGET WHAT THEY DID HERE. IT IS FOR US THE LIVING RATHER TO BE DEDICATED
(8/11) HERE TO THE UNFINISHED WORK WHICH THEY WHO FOUGHT HERE HAVE THUS FAR SO NOBLY ADVANCED. IT IS RATHER FOR US TO BE HERE DEDICATED TO
(9/11) THE GREAT TASK REMAINING BEFORE US, THAT FROM THESE HONORED DEAD WE TAKE INCREASED DEVOTION TO THAT CAUSE FOR WHICH THEY GAVE THE
(10/11) LAST FULL MEASURE OF DEVOTION, THAT WE HERE HIGHLY RESOLVE THAT THESE DEAD SHALL NOT HAVE DIED IN VAIN, THAT THIS NATION UNDER GOD
(11/11) SHALL HAVE A NEW BIRTH OF FREEDOM, AND THAT GOVERNMENT OF THE PEOPLE BY THE PEOPLE FOR THE PEOPLE SHALL NOT PERISH FROM THE EARTH.
Говард
источник
3

Руби, 75

Не может победить Perl, но, по крайней мере, он немного превосходит другое решение Ruby. Обратите внимание, что он печатает твиты в обратном порядке (проблема не указывает один).

f=->t,i=1{t=~/\S.{,130}\S(?!\S)/?puts("(#{i}/%d) #$&"%n=f[$',i+1])||n :i-1}
Lowjacker
источник
1
Хм ... Полагаю, я не уточнил порядок. Хорошая работа, угоняющая правила. ;-)
Gaffi
1

VBA, 251

Пробовал другой метод ... Не так хорошо, как мой оригинал, но я все еще работаю над этим ...

Sub a(s)
Dim n(99)
m=1
r=Split(StrConv(s,64),Chr(0))
For i=0 To Len(s)
If i-g>132 Then n(m)=Mid(s,g+1,u-g):i=u:g=i:m=m+1
If r(i)=" " Or r(i)=vbCr Then i=i+1:u=i
Next
n(m)=Mid(s,g+1)
For o=1 To m
Debug.Print "(" & o & "/" & m & ") " & n(o)
Next
End Sub

Выходы:

(1/11) FOUR SCORE AND SEVEN YEARS AGO OUR FATHERS BROUGHT FORTH ON THIS CONTINENT A NEW NATION CONCEIVED IN LIBERTY AND DEDICATED TO THE 
(2/11) PROPOSITION THAT ALL MEN ARE CREATED EQUAL. NOW WE ARE ENGAGED IN A GREAT CIVIL WAR TESTING WHETHER THAT NATION OR ANY NATION SO 
(3/11) CONCEIVED AND SO DEDICATED CAN LONG ENDURE. WE ARE MET ON A GREAT BATTLEFIELD OF THAT WAR. WE HAVE COME TO DEDICATE A PORTION OF 
(4/11) THAT FIELD AS A FINAL RESTING PLACE FOR THOSE WHO HERE GAVE THEIR LIVES THAT THAT NATION MIGHT LIVE. IT IS ALTOGETHER FITTING AND 
(5/11) PROPER THAT WE SHOULD DO THIS. BUT IN A LARGER SENSE WE CAN NOT DEDICATE, WE CAN NOT CONSECRATE, WE CAN NOT HALLOW, THIS GROUND. THE 
(6/11) BRAVE MEN LIVING AND DEAD WHO STRUGGLED HERE HAVE CONSECRATED IT FAR ABOVE OUR POOR POWER TO ADD OR DETRACT. THE WORLD WILL LITTLE 
(7/11) NOTE NOR LONG REMEMBER WHAT WE SAY HERE BUT IT CAN NEVER FORGET WHAT THEY DID HERE. IT IS FOR US THE LIVING RATHER TO BE DEDICATED 
(8/11) HERE TO THE UNFINISHED WORK WHICH THEY WHO FOUGHT HERE HAVE THUS FAR SO NOBLY ADVANCED. IT IS RATHER FOR US TO BE HERE DEDICATED TO 
(9/11) THE GREAT TASK REMAINING BEFORE US, THAT FROM THESE HONORED DEAD WE TAKE INCREASED DEVOTION TO THAT CAUSE FOR WHICH THEY GAVE THE 
(10/11) LAST FULL MEASURE OF DEVOTION, THAT WE HERE HIGHLY RESOLVE THAT THESE DEAD SHALL NOT HAVE DIED IN VAIN, THAT THIS NATION UNDER GOD 
(11/11) SHALL HAVE A NEW BIRTH OF FREEDOM, AND THAT GOVERNMENT OF THE PEOPLE BY THE PEOPLE FOR THE PEOPLE SHALL NOT PERISH FROM THE EARTH.
Gaffi
источник
1

BASH (88 символов)

fold -132 -s |tac|cat -n |tac|awk '{if(NR==1)a=$1;$1="";printf "(%d/%d) %s\n",NR,a,$0 }'

Сложите строку на 132 символа (чтобы учесть количество твитов), на пробелах ( -s), читайте текст в обратном направлении (tac), нумеруйте текст ( cat -n), реверсируйте ( tac). Внутри Awk: Первая строка (NR == 1), присвойте букве «a» значение в первой. Пустой номер столбца. Напечатайте (NR / 'a') затем строку.

Выход:

(1/12)  FOUR SCORE AND SEVEN YEARS AGO OUR FATHERS BROUGHT FORTH ON THIS CONTINENT A NEW NATION CONCEIVED IN LIBERTY AND DEDICATED TO THE
(2/12)  PROPOSITION THAT ALL MEN ARE CREATED EQUAL. NOW WE ARE ENGAGED IN A GREAT CIVIL WAR TESTING WHETHER THAT NATION OR ANY NATION SO
(3/12)  CONCEIVED AND SO DEDICATED CAN LONG ENDURE. WE ARE MET ON A GREAT BATTLEFIELD OF THAT WAR. WE HAVE COME TO DEDICATE A PORTION OF
(4/12)  THAT FIELD AS A FINAL RESTING PLACE FOR THOSE WHO HERE GAVE THEIR LIVES THAT THAT NATION MIGHT LIVE. IT IS ALTOGETHER FITTING AND
(5/12)  PROPER THAT WE SHOULD DO THIS. BUT IN A LARGER SENSE WE CAN NOT DEDICATE, WE CAN NOT CONSECRATE, WE CAN NOT HALLOW, THIS GROUND.
(6/12)  THE BRAVE MEN LIVING AND DEAD WHO STRUGGLED HERE HAVE CONSECRATED IT FAR ABOVE OUR POOR POWER TO ADD OR DETRACT. THE WORLD WILL
(7/12)  LITTLE NOTE NOR LONG REMEMBER WHAT WE SAY HERE BUT IT CAN NEVER FORGET WHAT THEY DID HERE. IT IS FOR US THE LIVING RATHER TO BE
(8/12)  DEDICATED HERE TO THE UNFINISHED WORK WHICH THEY WHO FOUGHT HERE HAVE THUS FAR SO NOBLY ADVANCED. IT IS RATHER FOR US TO BE HERE
(9/12)  DEDICATED TO THE GREAT TASK REMAINING BEFORE US, THAT FROM THESE HONORED DEAD WE TAKE INCREASED DEVOTION TO THAT CAUSE FOR WHICH
(10/12)  THEY GAVE THE LAST FULL MEASURE OF DEVOTION, THAT WE HERE HIGHLY RESOLVE THAT THESE DEAD SHALL NOT HAVE DIED IN VAIN, THAT THIS
(11/12)  NATION UNDER GOD SHALL HAVE A NEW BIRTH OF FREEDOM, AND THAT GOVERNMENT OF THE PEOPLE BY THE PEOPLE FOR THE PEOPLE SHALL NOT PERISH
(12/12)  FROM THE EARTH.
Pureferret
источник
Я уверен, что есть более короткая команда bash, которая злоупотребила wc -l
Pureferret
1

Javascript (только для FF), 92 символа

r=(s)=>{s.match(/.{1,132}(\s|$)/gm).map((v,i,a)=>console.log(v,'('+(i+1)+'/'+a.length+')'))}

Отформатированный, это плагиат скрипта Perl:

r=(s)=>{
    s.match(/.{1,132}(\s|$)/gm).map((v,i,a) => console.log(v,'('+(i+1)+'/'+a.length+')'))
}
Не тот Чарльз
источник
0

VBA, 227

Sub a(s)
Dim n(99)
m=1
x=133
While Len(s)>x
t=Left(s,x):p=InStrRev(t," "):q=InStrRev(t,vbCr):i=IIf(p>q,p,q):t=Left(s,i):s=Mid(s,i+1):n(m)=t:m=m+1
Wend
n(m)=s
For o=1 To m
Debug.Print "(" & o & "/" & m & ") " & n(o)
Next
End Sub

Выходы:

(1/11) FOUR SCORE AND SEVEN YEARS AGO OUR FATHERS BROUGHT FORTH ON THIS CONTINENT A NEW NATION CONCEIVED IN LIBERTY AND DEDICATED TO THE 
(2/11) PROPOSITION THAT ALL MEN ARE CREATED EQUAL. NOW WE ARE ENGAGED IN A GREAT CIVIL WAR TESTING WHETHER THAT NATION OR ANY NATION SO 
(3/11) CONCEIVED AND SO DEDICATED CAN LONG ENDURE. WE ARE MET ON A GREAT BATTLEFIELD OF THAT WAR. WE HAVE COME TO DEDICATE A PORTION OF 
(4/11) THAT FIELD AS A FINAL RESTING PLACE FOR THOSE WHO HERE GAVE THEIR LIVES THAT THAT NATION MIGHT LIVE. IT IS ALTOGETHER FITTING AND 
(5/11) PROPER THAT WE SHOULD DO THIS. BUT IN A LARGER SENSE WE CAN NOT DEDICATE, WE CAN NOT CONSECRATE, WE CAN NOT HALLOW, THIS GROUND. THE 
(6/11) BRAVE MEN LIVING AND DEAD WHO STRUGGLED HERE HAVE CONSECRATED IT FAR ABOVE OUR POOR POWER TO ADD OR DETRACT. THE WORLD WILL LITTLE 
(7/11) NOTE NOR LONG REMEMBER WHAT WE SAY HERE BUT IT CAN NEVER FORGET WHAT THEY DID HERE. IT IS FOR US THE LIVING RATHER TO BE DEDICATED 
(8/11) HERE TO THE UNFINISHED WORK WHICH THEY WHO FOUGHT HERE HAVE THUS FAR SO NOBLY ADVANCED. IT IS RATHER FOR US TO BE HERE DEDICATED TO 
(9/11) THE GREAT TASK REMAINING BEFORE US, THAT FROM THESE HONORED DEAD WE TAKE INCREASED DEVOTION TO THAT CAUSE FOR WHICH THEY GAVE THE 
(10/11) LAST FULL MEASURE OF DEVOTION, THAT WE HERE HIGHLY RESOLVE THAT THESE DEAD SHALL NOT HAVE DIED IN VAIN, THAT THIS NATION UNDER GOD 
(11/11) SHALL HAVE A NEW BIRTH OF FREEDOM, AND THAT GOVERNMENT OF THE PEOPLE BY THE PEOPLE FOR THE PEOPLE SHALL NOT PERISH FROM THE EARTH.
Gaffi
источник
0

Javascript (только для FF), 135 символов

n=(s)=>{for(g=[],i=1,a=s.split(/(\s)/),r='';c=a.shift();g[i]=r+=c)if((c+r)[132]&&i++)r='';g.map((v,k)=>console.log(v,'('+k+'/'+i+')'))}

Отформатированный, это:

n=(s)=>{
    for (g=[],i=1,a=s.split(/(\s)/),r=''; c=a.shift(); g[i]=r+=c) {
        if((c+r)[132]&&i++) {
            r='';
        }
    }
    g.map((v,k)=>console.log(v,'('+k+'/'+i+')'))
}
Не тот Чарльз
источник
Я думаю, что это умнее, чем мой короткий ответ
не то, что Чарльз
0

PHP, 233

Правильно ли я считаю, что это первый ответ, который не изменяет счетной части?
(Это также работает с более чем 99 твитами; я мог бы сбрить еще два байта, если бы разрешил бесконечный цикл в этом случае.)

function t($s,$e=1){$a=explode(' ',$s);while($a){$t=++$n;while($a&&strlen($t.$a[0])<137-$e)$t.=' '.array_shift($a);$r[]=$t;}if($n>=10**$e)t($s,$e+1);else foreach($r as$i=>$s)echo preg_replace('%(^\d+)%',"(\$1/$n)",$s),'
';}

ungolfed:

function t($s,$e=1)
{
    $a=explode(' ',$s);
    while($a)
    {
        $t=++$n;
        while($a&&strlen($t.$a[0])<137-$e)$t.=' '.array_shift($a);
        $r[]=$t;
    }
    if($n>=10**$e)                  // if tweet count has more than $e digits
        t($s,ceil(log10($n+1)));    // use correct length (golfed: try with length+1)
    else
        foreach($r as$i=>$s)
            echo preg_replace('%(^\d+)%',"(\$1/$n)",$s),"\n";
}
Titus
источник