Crea un analizador de Twitter

14

Introducción

Usas Twitter (fingimos, si no), donde estás limitado a 140 caracteres por tweet individual que quieras compartir con el mundo. Si desea twittear a la dirección de Gettysburg de sus seguidores Abraham Lincoln , entonces necesitaría dividir el texto en múltiples fragmentos de 140 caracteres para poder transmitir todo el mensaje. Sin embargo, esos fragmentos no siempre deben tener exactamente 140 caracteres de longitud. Digamos, por ejemplo, dividimos el discurso en fragmentos de 17 caracteres, terminaríamos con estos tweets:

  • CUATRO PUNTUACIÓN Y SE
  • VEN AÑOS HACE NUESTRO
  • PADRES TRAIDOS
  • FORTH EN ESTA CON
  • TINTE UN NUEVO NATI
  • EN CONCEBIDO EN L
  • (y así)

¡Eso no es bueno! Cuando las palabras individuales se separan, puede ser difícil entender lo que está tratando de decir. Además, en el twitterverse, uno de tus seguidores puede encontrar un tweet específico y no darse cuenta de que hay más en el mensaje, por lo que querrás numerar tus tweets para que tengan un contexto con el que trabajar (todavía usando fragmentos de 17 caracteres) ):

  • (1/7) CUATRO PUNTUACIÓN Y
  • (2/7) HACE SIETE AÑOS
  • (3/7) NUESTROS PADRES
  • (4/7) PRESENTADO
  • (5/7) ESTE CONTINENTE A
  • (6/7) NUEVA NACIÓN
  • (7/7) CONCEBIDO EN ...

Podrías descubrir manualmente la mejor configuración para tus tweets a mano, ¡pero para eso tenemos computadoras!

Desafío

En el código más corto posible, analice la dirección de Gettysburg (o cualquier texto, pero nos quedaremos con este como ejemplo) en un conjunto de tweets que consta de no más de 140 caracteres (suponga ASCII, ya que nuestro texto de ejemplo no debería tener cualquier parte poco común / inusual en ella).

Detalles

  • Su función / programa / etc. debe tomar un solo argumento de cadena y generar una línea de texto para cada tweet.
    • Suponga que esta entrada nunca dará como resultado más de 99 tweets totales cuando se analice, independientemente de cómo elija analizar (siempre y cuando esa elección aún se ajuste a los otros puntos del desafío).
  • Tweets necesidad de incluir una tweet numberde total tweetsindicador en el formato " (x/y)" que precede el cuerpo del tweet.
    • ¡Este recuento ocupará parte de tu espacio de 140 caracteres!
  • Los fragmentos de tweets solo se pueden dividir en líneas nuevas o espacios.
    • No se permiten guiones, puntos, comas u otros signos de puntuación, a menos que estén precedidos o seguidos inmediatamente por un espacio o una nueva línea.
  • Los tweets deben constar de tantas palabras completas como sea posible.
    • Esta restricción es un poco flexible, por ejemplo, cuando tu tweet final solo tiene una palabra
  • Este es el código de golf, por lo que gana el código más corto.

Texto completo de la dirección de Gettysburg

(Su código aún debe poder manejar cualquier cadena ASCII que se le pase).

CUATRO PUNTUACIONES Y SIETE AÑOS HACE NUESTROS PADRES CREARON EN ESTE CONTINENTE UNA NUEVA NACIÓN CONCEBIDA EN LIBERTAD Y DEDICADA A LA PROPOSICIÓN DE QUE TODOS LOS HOMBRES SON IGUALES. AHORA ESTAMOS COMPROMETIDOS EN UNA GRAN GUERRA CIVIL QUE PRUEBA SI NACIÓN O CUALQUIER NACIÓN TAN CONCEBIDA Y TAN DEDICADA PUEDE DURAR MUCHO. Nos encontramos en un gran campo de batalla de esa guerra. HEMOS VENIDO A DEDICAR UNA PARTE DE ESE CAMPO COMO UN LUGAR DE DESCANSO FINAL PARA AQUELLOS QUE AQUÍ DAN SUS VIDAS QUE ESTA NACIÓN PODRÍA VIVIR. ES AÚN MÁS ADECUADO Y ADECUADO QUE DEBEMOS HACER ESTO. PERO EN UN SENTIDO MÁS GRANDE, NO PODEMOS DEDICAR, NO PODEMOS CONSAGRAR, NO PODEMOS DERRIBAR, ESTE TERRENO. LOS HOMBRES VALIENTES VIVOS Y MUERTOS QUE LUCHARON AQUÍ LO CONSAGRARON LEJOS DE NUESTRO POBRE PODER PARA AGREGAR O RESTRINGIR. El mundo no tendrá en cuenta ni mucho tiempo lo que decimos aquí, pero nunca puede olvidar lo que hicieron aquí. ES PARA NOSOTROS LA VIDA PREVIA QUE DEDICARÁ AQUÍ AL TRABAJO SIN TERMINAR QUE ELLOS QUE LUCHARON AQUÍ HAN AVANZADO MUCHO. ES MEJOR QUE NOSOTROS ESTÉN DEDICADOS A LA GRAN TAREA RESTANTE ANTES DE NOSOTROS, QUE DE ESTOS HONRADOS MUERTOS TOMEMOS MAYOR DEVOCIÓN A ESA CAUSA POR LA CUAL DAN LA ÚLTIMA MEDIDA COMPLETA DE DEVOCIÓN, QUE NOSOTROS RESOLVIEMOS ALTAMENTE HAN MUERIDO EN VANO, QUE ESTA NACIÓN BAJO DIOS TENGA UN NUEVO NACIMIENTO DE LIBERTAD, Y QUE EL GOBIERNO DE LAS PERSONAS POR LAS PERSONAS PARA LAS PERSONAS NO PERECERÁ DE LA TIERRA.

Gaffi
fuente
En tus tweets de ejemplo, has roto palabras, pero en las reglas, dices que no lo hagas. Haga que esto sea coherente: cambie las reglas o los ejemplos.
Boothby
@boothby Bueno, el ejemplo es mostrar explícitamente lo que no está permitido ... Veré si no puedo volver a redactar eso.
Gaffi
Aclare la pregunta para dejar en claro si las respuestas deben o no tratar con la posibilidad de tener que volver a calcular la palabra -> paquetes de tweets debido a la parte (X / Y). Esto hace que el problema sea significativamente más difícil e introduce un límite en el mensaje más grande que uno puede comunicar sin codificar datos en la parte (X / Y).
Arrdem
@rmckenzie Lo siento, ¿no estoy seguro si te entiendo? ¿Quiere dar cuenta del hecho de que podría tener más de 100 tweets en un conjunto?
Gaffi
@Gaffi: Sí, ¿hay un número máximo de partes en las que se dividirán nuestros mensajes (en cuyo caso se pueden hacer suposiciones y el sol de grc es válido) o tenemos que apoyar el caso general, como la serialización de varias mil palabras? a un tweet que sugiere su enunciado del problema tal como está.
Arrdem

Respuestas:

12

Perl, 51 personajes

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

Requiere línea de comando -p, 1 carácter incluido.

Explicación: inserte la porción de conteo antes y la nueva línea después de grupos de palabras de hasta 132 caracteres. Inserte un marcador de posición ( ~) para el total, que luego se reemplaza por una segunda sustitución. Esto se rompe si el mensaje contiene ~, pero uno podría usar fácilmente un carácter no imprimible.

Se engaña a poco: siempre permite siete caracteres para la parte de recuento, (nn/nn). Realmente, si es (n/n)así, debería permitir dos caracteres adicionales. Sin embargo, una solución arbitraria a esto aumentaría en gran medida la complejidad del problema.


fuente
\Ges inútil aquí, ¿no?
user2846289
26

Python, 140

^ 140 caracteres fue en realidad una coincidencia.

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

Si bien quedan palabras, la solución creará nuevos tweets a partir del suministro de palabras y los agregará a una lista. Para cada tweet, seguirá intentando agregar palabras hasta que la longitud del tweet alcance más de 140 caracteres. Se reservan dos caracteres para el total tweets, que se completan más adelante a medida que se imprime cada tweet de la lista.

Salida de ejemplo:

(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
fuente
Era exactamente lo que necesitaba. Esta solución es genial. Gracias @grc
iChux
7

Ruby, 77 caracteres

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

Empaquetado la lógica en una sola expresión regular. Salida 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
fuente
3

Rubí, 75

No puede vencer a Perl, pero al menos supera marginalmente a la otra solución de Ruby. Tenga en cuenta que imprime los tweets en orden inverso (el problema no especifica uno).

f=->t,i=1{t=~/\S.{,130}\S(?!\S)/?puts("(#{i}/%d) #$&"%n=f[$',i+1])||n :i-1}
Lowjacker
fuente
1
Hm ... supongo que no especifiqué el orden. Buen trabajo secuestrando las reglas. ;-)
Gaffi
1

VBA, 251

Intenté otro método ... No tan bueno como mi original, pero todavía estoy trabajando en ello ...

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

Salidas:

(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
fuente
1

BASH (88 caracteres)

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

Dobla la línea a 132 caracteres (para permitir nuestro recuento de tweets), en espacios ( -s), lee el texto hacia atrás (tac), numera el texto ( cat -n), revierte ( tac). Dentro de Awk: Primera línea (NR == 1), asigne a la letra 'a' el valor en la primera. En blanco la columna del número. Imprima (NR / 'a') y luego la línea.

Salida:

(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
fuente
Estoy seguro de que hay un comando bash más corto, uno que abusó de wc -l
Pureferret
1

Javascript (solo FF), 92 caracteres

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

Formateado, es una estafa del script Perl:

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

Salidas:

(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
fuente
0

Javascript (solo FF), 135 caracteres

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

Formateado, eso es:

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+')'))
}
No es que Charles
fuente
Creo que esto es más inteligente que mi respuesta más corta
no es que Charles
0

PHP, 233

¿Estoy en lo cierto al suponer que esta es la primera respuesta que no engaña a la porción de conteo?
(También funciona con más de 99 tweets; podría reducir dos bytes más si permitiera un bucle infinito en ese caso).

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

sin 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
fuente