Créer un analyseur Twitter

14

introduction

Vous utilisez Twitter (supposons, sinon), où vous êtes limité à 140 caractères par tweet individuel que vous souhaitez partager avec le monde. Si vous souhaitez tweeter à vos abonnés l' adresse Gettysburg d' Abraham Lincoln , alors vous devrez diviser le texte en plusieurs morceaux de 140 caractères afin de diffuser le message dans son intégralité. Cependant, ces morceaux ne doivent pas toujours comporter exactement 140 caractères. Disons par exemple, nous avons divisé le discours en morceaux de 17 caractères, nous nous retrouverions avec ces tweets:

  • QUATRE SCORE ET SE
  • IL Y A 11 ANS
  • PÈRES PORTÉS
  • FORTH SUR CE CON
  • TINENT UN NOUVEAU NATI
  • SUR CONÇU EN L
  • (etc)

Ce n'est pas bon! Lorsque des mots individuels sont décomposés, il peut être difficile de comprendre ce que vous essayez de dire. De plus, dans twitterverse, l'un de vos abonnés peut rencontrer un tweet spécifique et ne pas réaliser qu'il y a plus dans le message, vous voudrez donc numéroter vos tweets afin qu'ils aient un certain contexte pour travailler (en utilisant toujours des blocs de 17 caractères ):

  • (1/7) QUATRE SCORE ET
  • (2/7) IL Y A SEPT ANS
  • (3/7) NOS PÈRES
  • (4/7) FORTH SUR
  • (5/7) CE CONTINENT A
  • (6/7) NOUVELLE NATION
  • (7/7) CONÇU EN ...

Vous pouvez déterminer manuellement la meilleure configuration pour vos tweets à la main, mais c'est pour cela que nous avons des ordinateurs!

Défi

Dans le code le plus court possible, analysez l'adresse de Gettysburg (ou n'importe quel texte, mais nous nous en tiendrons à celui-ci à titre d'exemple) dans un ensemble de tweets ne comprenant pas plus de 140 caractères (supposez ASCII, car notre exemple de texte ne devrait pas avoir tout morceau inhabituel / inhabituel).

Détails

  • Votre fonction / programme / etc doit prendre un seul argument de chaîne et afficher une ligne de texte pour chaque tweet.
    • Supposons que cette entrée n'entraînera jamais plus de 99 tweets au total lors de l'analyse, quelle que soit la façon dont vous choisissez d'analyser (tant que ce choix correspond toujours aux autres points du défi).
  • Tweets doivent inclure un tweet numberdes total tweetsindicateurs dans le format « (x/y)» précédant le corps du tweet.
    • Ce décompte occupera une partie de votre espace de 140 caractères!
  • Les morceaux de Tweet ne peuvent être divisés que sur des nouvelles lignes ou des espaces.
    • Aucun tiret, point, virgule ou autre ponctuation n'est autorisé, sauf s'il est immédiatement précédé ou suivi d'un espace ou d'une nouvelle ligne.
  • Les tweets doivent comprendre autant de mots complets que possible.
    • Cette contrainte est un peu flexible, par exemple lorsque votre dernier tweet n'a qu'un seul mot
  • C'est le golf de code, donc le code le plus court gagne.

Texte complet de l'adresse de Gettysburg

(Votre code devrait toujours être capable de gérer toute chaîne ASCII qui lui est transmise.)

QUATRE SCORES ET SEPT ANS PLUS TARD NOS PÈRES ONT FAIT CONTINUER SUR CE CONTINENT UNE NOUVELLE NATION CONÇUE EN LIBERTÉ ET DÉDIÉ À LA PROPOSITION QUE TOUS LES HOMMES SONT CRÉÉS ÉGAUX. MAINTENANT, NOUS SOMMES ENGAGÉS DANS UNE GRANDE GUERRE CIVILE TESTANT SI CETTE NATION OU TOUTE NATION AINSI CONCEPTEE ET AUSSI DÉDIÉE PEUT DURER DURABLEMENT. NOUS SOMMES RENCONTRÉS SUR UN GRAND CHAMP DE BATAILLE DE CETTE GUERRE. NOUS SOMMES VENUS DE DÉDIER UNE PARTIE DE CE DOMAINE COMME LIEU DE REPOS FINAL POUR CEUX QUI ONT DONNÉ LEUR VIE QUE CETTE NATION POURRAIT VIVRE. C'EST ENCORE ADAPTÉ ET APPROPRIÉ QUE NOUS DEVONS LE FAIRE. MAIS DANS UN SENS PLUS GRAND, NOUS NE POUVONS PAS DÉDIER, NOUS NE POUVONS PAS CONSÉCRER, NOUS NE POUVONS PAS CREER CE TERRAIN. LES HOMMES BRAVES VIVANTS ET MORTS QUI ONT LUTTÉ ICI ONT CONSACRÉ AU-DELÀ DE NOTRE PAUVRE POUVOIR D'AJOUTER OU DE DÉTRUIRE. LE MONDE SERA PEU NOTE OU NE RAPPELERA PLUS CE QUE NOUS DISONS ICI MAIS IL NE PEUT JAMAIS OUBLIER CE QU'ILS ONT FAIT ICI. C'EST POUR NOUS LE PLUTÔT VIVANT À ÊTRE DÉDIÉ ICI AU TRAVAIL NON FINI QUE CEUX QUI ONT FOULU ICI ONT AINSI JUSTEMENT AVANCÉ. IL EST PLUTÔT QUE NOUS SOYONS DÉDIÉS ICI À LA GRANDE TÂCHE QUI RESTE DEVANT NOUS, QUE DE CES MORTS HONORÉS NOUS PRENONS UNE AUGMENTATION DE LA DÉVOTION À CETTE CAUSE POUR LAQUELLE ILS ONT DONNÉ LA DERNIÈRE MESURE PLEINE DE DÉVOTION. SONT MORT EN VAIN, QUE CETTE NATION SOUS DIEU AURA UNE NOUVELLE NAISSANCE DE LIBERTÉ, ET QUE LE GOUVERNEMENT DU PEUPLE PAR LE PEUPLE POUR LE PEUPLE NE MORT PAS DE LA TERRE.

Gaffi
la source
Dans vos exemples de tweets, vous avez cassé des mots - mais dans les règles, vous dites de ne pas le faire. Veuillez rendre cela cohérent - changez les règles ou les exemples.
stand
@boothby Eh bien, l'exemple est de montrer explicitement ce qui n'est pas autorisé ... Je vais voir si je ne peux pas reformuler cela.
Gaffi
Veuillez clarifier la question pour indiquer clairement si les réponses doivent ou non traiter de la possibilité de recalculer les emballages mot -> tweet en raison de la partie (X / Y). Cela rend le problème beaucoup plus difficile et introduit un plafond sur le plus grand message que l'on puisse communiquer sans coder les données dans la partie (X / Y).
arrdem
@rmckenzie Désolé, vous ne savez pas si je vous reçois? Vous voulez dire que vous pourriez avoir plus de 100 tweets dans un ensemble?
Gaffi
@Gaffi - Oui, y a-t-il un nombre maximum de parties dans lesquelles nos messages seront divisés (dans ce cas, des hypothèses peuvent être faites et le sol de grc est valide) ou devons-nous soutenir le cas général tel que la sérialisation d'un mot de plusieurs milliers à un tweet qui suggère votre énoncé du problème.
arrdem

Réponses:

12

Perl, 51 caractères

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

Nécessite une invite de ligne de commande -p, 1 caractère inclus.

Explication: insérez la partie de comptage avant et la nouvelle ligne après les groupes de mots de 132 caractères maximum. Insérez un espace réservé ( ~) pour le total, qui est ensuite remplacé par une deuxième substitution. Cela casse si le message contient ~, mais on pourrait facilement utiliser un caractère non imprimable à la place.

Il triche un peu: il permet toujours sept caractères pour la partie de comptage, (nn/nn). Vraiment, si c'est le cas, (n/n)il devrait autoriser deux caractères supplémentaires. Cependant, une solution arbitraire à cela augmenterait considérablement la complexité du problème.


la source
\Gest inutile ici, non?
user2846289
26

Python, 140

^ 140 caractères était en fait une coïncidence.

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

Bien qu'il reste des mots, la solution créera de nouveaux tweets à partir de la fourniture de mots et les ajoutera à une liste. Pour chaque tweet, il continuera d'essayer d'ajouter des mots jusqu'à ce que la longueur du tweet atteigne plus de 140 caractères. Deux caractères sont réservés pour le total tweets, qui sont remplis plus tard lors de l'impression de chaque tweet de la liste.

Exemple de sortie:

(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
la source
C'était exactement ce dont j'avais besoin. Cette solution est cool. Merci @grc
iChux
7

Ruby, 77 caractères

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

Emballé la logique dans une seule expression régulière. Sortie de 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.
Howard
la source
3

Rubis, 75

Ne peut pas battre Perl, mais au moins il bat légèrement l'autre solution Ruby. Notez qu'il imprime les tweets dans l'ordre inverse (le problème n'en spécifie pas un).

f=->t,i=1{t=~/\S.{,130}\S(?!\S)/?puts("(#{i}/%d) #$&"%n=f[$',i+1])||n :i-1}
Lowjacker
la source
1
Hm ... Je suppose que je n'ai pas précisé l'ordre. Bon travail détournant les règles. ;-)
Gaffi
1

VBA, 251

J'ai essayé une autre méthode ... Pas tout à fait aussi bonne que mon original, mais je travaille toujours dessus ...

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

Les sorties:

(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
la source
1

BASH (88 caractères)

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

Pliez la ligne à 132 caractères (pour permettre notre nombre de tweets), sur les espaces ( -s), lisez le texte à l'envers (tac), numérotez le texte ( cat -n), inversez ( tac). Inside Awk: Première ligne (NR == 1), attribuez à la lettre 'a' la valeur de la première. Videz la colonne numérique. Imprimez (NR / 'a') puis la ligne.

Production:

(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
la source
Je suis convaincu qu'il existe une commande bash plus courte, une qui a abusé de wc -l
Pureferret
1

Javascript (FF uniquement), 92 caractères

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

Formaté, c'est une arnaque du script Perl:

r=(s)=>{
    s.match(/.{1,132}(\s|$)/gm).map((v,i,a) => console.log(v,'('+(i+1)+'/'+a.length+')'))
}
Pas que Charles
la source
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

Les sorties:

(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
la source
0

Javascript (FF uniquement), 135 caractères

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+')'))}

Formaté, c'est:

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+')'))
}
Pas que Charles
la source
Je pense que c'est plus intelligent que ma réponse plus courte
Pas que Charles
0

PHP, 233

Ai-je raison de supposer que c'est la première réponse qui ne triche pas sur la partie de comptage?
(Cela fonctionne également avec plus de 99 tweets; je pourrais raser deux octets supplémentaires si je permettais une boucle infinie dans ce cas.)

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),'
';}

non golfé:

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
la source