Crea un parser di Twitter


14

introduzione

Usi Twitter (facciamo finta, in caso contrario), dove sei limitato a 140 caratteri per singolo tweet che ti interessa condividere con il mondo. Se desideri inviare un tweet ai tuoi follower sull'indirizzo di Gettysburg di Abraham Lincoln , dovrai dividere il testo in più blocchi di 140 caratteri per far sì che l'intero messaggio venga diffuso. Tuttavia, quei pezzi non dovrebbero sempre essere lunghi esattamente 140 caratteri. Ad esempio, abbiamo suddiviso il discorso in blocchi di 17 caratteri, finiremmo con questi tweet:

  • QUATTRO PUNTEGGIO E SE
  • VEN ANNI DI NUOVO
  • PADRI ROTTI
  • FORTH SU QUESTO CON
  • TINENT UN NUOVO NATI
  • SU CONCETTO IN L
  • (e così via)

Non va bene! Quando le singole parole vengono scomposte, può essere difficile capire cosa stai cercando di dire. Inoltre, nel twitterverse, uno dei tuoi follower potrebbe imbattersi in un tweet specifico e non rendersi conto che c'è di più nel messaggio, quindi ti consigliamo di numerare i tuoi tweet in modo che abbiano un contesto con cui lavorare (usando ancora blocchi di 17 caratteri ):

  • (1/7) QUATTRO PUNTEGGIO E
  • (2/7) SETTE ANNI
  • (3/7) I NOSTRI PADRI
  • (4/7) SPEDITO FORTH ON
  • (5/7) QUESTO CONTINENTE A
  • (6/7) NUOVA NAZIONE
  • (7/7) CONCETTO IN ...

Puoi capire manualmente la migliore configurazione per i tuoi tweet a mano, ma è per questo che abbiamo i computer!

Sfida

Nel codice più breve possibile, analizza l'indirizzo di Gettysburg (o qualsiasi altro testo, ma ci limiteremo a questo come esempio) in un insieme di tweet composto da non più di 140 caratteri (supponiamo ASCII, poiché il nostro testo di esempio non dovrebbe avere eventuali bit insoliti / insoliti in esso).

Dettagli

  • La tua funzione / programma / etc dovrebbe includere un singolo argomento stringa e generare una riga di testo per ogni tweet.
    • Supponiamo che questo input non comporterà mai più di 99 tweet totali quando analizzato, indipendentemente da come scegli di analizzare (purché tale scelta si adatti ancora agli altri punti della sfida).
  • Tweets devono includere una tweet numberdi total tweetsindicatore nel formato " (x/y)" precede il corpo del tweet.
    • Questo conteggio occuperà parte del tuo spazio di 140 caratteri!
  • I blocchi di Tweet possono essere divisi solo su newline o spazi.
    • Non sono consentiti trattini, punti, virgole o altri segni di punteggiatura, a meno che non siano immediatamente preceduti o seguiti da uno spazio o da una nuova riga.
  • I tweet dovrebbero essere composti da quante più parole possibili possibili.
    • Questo vincolo è un po 'flessibile, ad esempio quando il tuo tweet finale ha solo una parola
  • Questo è il codice golf, quindi vince il codice più corto.

Testo completo dell'indirizzo di Gettysburg

(Il codice dovrebbe essere comunque in grado di gestire qualsiasi stringa ASCII passata ad esso.)

QUATTRO PUNTEGGI E SETTE ANNI NEI NOSTRI PADRE HANNO PORTATO QUARTO SU QUESTO CONTINENTE UNA NUOVA NAZIONE CONCEPITA NELLA LIBERTÀ E DEDICATA ALLA PROPOSTA CHE TUTTI GLI UOMINI SONO CREATI UGUALE. ORA SIAMO IMPEGNATI IN UNA GRANDE PROVA DI GUERRA CIVILE SE QUESTA NAZIONE O QUALUNQUE NAZIONE COSÌ CONCEPITA E COSÌ DEDICATA PUO 'ESSERE LUNGA. SIAMO INCONTRATI SU UN GRANDE BATTLEFIELD DI QUELLA GUERRA. Siamo venuti per dedicare una parte di quel campo come un luogo di riposo finale per quelli che hanno dato loro la vita che quella nazione potrebbe vivere. È ANCORA ADATTO E CORRETTO CHE DOVREBBE FARE QUESTO. MA IN UN SENSO PIÙ GRANDE NON POSSIAMO DEDICARSI, NON POSSIAMO CONSOLTARE, NON POSSIAMO ESSERE PRESENTI, QUESTO TERRENO. GLI UOMINI GRAVI CHE VIVONO E MORTI CHE HANNO LOTTATO QUI HANNO CONSACRATO LONTANO SOPRA IL NOSTRO POTENTE POTERE DA AGGIUNGERE O DETRATTARE. IL MONDO NOTA BASSO NON RICORDA NÉ LUNGO CHE COSA DICIAMO QUI, MA NON PU FOR MAI DIMENTICARE COSA HANNO FATTO QUI. È PER NOI CHE IL SOGGIORNO VIVENTE DEVE ESSERE DEDICATO QUI AL LAVORO NON FINITO CHE HANNO FATTO QUANTO HANNO AVUTO COSÌ AVANZATO. È RAPPRESO CHE NOI SIAMO DEDICATI AL GRANDE COMPITO RIMANENTE PRIMA DI NOI, CHE DA QUESTI ONORATI MORTI ABBIAMO AUMENTATO UN'ATTIVAZIONE A QUESTA CAUSA PER CUI HANNO DATO L'ULTIMA MISURA COMPLETA DI DEVOZIONE, CHE ABBIAMO RISOLUTAMENTE RISOLTO CHE QUESTI MORTI NON DEVONO ESSERE SONO MORTI A VAIN, CHE QUESTA NAZIONE SOTTO DIO DEVE AVERE UNA NUOVA NASCITA DI LIBERTÀ E CHE IL GOVERNO DELLA GENTE DA PARTE DELLE PERSONE PER LE PERSONE NON DEVE ESSERE MORTO DALLA TERRA.


Nei tuoi tweet di esempio, hai rotto le parole, ma nelle regole dici di non farlo. Per favore, rendilo coerente - cambia le regole o gli esempi.
stand dal

@boothby Bene, l'esempio è mostrare esplicitamente ciò che non è permesso ... Vedrò se non riesco a riformularlo.
Gaffi,

Si prega di chiarire la domanda per chiarire se le risposte devono o meno affrontare la possibilità di dover ricalcolare gli imballaggi di parole -> tweet a causa della parte (X / Y). Questo rende il problema significativamente più difficile e introduce un limite al messaggio più grande che uno può comunicare senza codificare i dati nella parte (X / Y).
arrdem,

@rmckenzie Siamo spiacenti, non sono sicuro se ti prendo? Intendi rendere conto del fatto che potresti avere più di 100 tweet in un set?
Gaffi,

@Gaffi - Sì, esiste un numero massimo di parti in cui verranno suddivisi i nostri messaggi (in quali casi possono essere fatte ipotesi e il sol di grc è valido) o dobbiamo supportare il caso generale come la serializzazione di più di mille parole a un tweet suggerito dalla tua affermazione sul problema.
Arrdem,

Risposte:


12

Perl, 51 personaggi

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

Richiede -p prompt della riga di comando, 1 carattere incluso.

Spiegazione: inserire la parte di conteggio prima e la nuova riga dopo i gruppi di parole fino a 132 caratteri. Inserisci un segnaposto ( ~) per il totale, che viene quindi sostituito da una seconda sostituzione. Questo si interrompe se il messaggio contiene ~, ma si potrebbe facilmente usare un carattere non stampabile.

E 'un po' trucchi: permette sempre di sette caratteri per la porzione di conteggio, (nn/nn). Davvero, se lo è (n/n), dovrebbe consentire due personaggi extra. Tuttavia, una soluzione arbitraria a questo aumenterebbe notevolmente la complessità del problema.


\Gè inutile qui, no?
user2846289

26

Python, 140

^ 140 caratteri era in realtà una coincidenza.

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

Mentre ci sono ancora parole, la soluzione creerà nuovi tweet dalla fornitura di parole e li aggiungerà a un elenco. Per ogni tweet, continuerà a cercare di aggiungere parole fino a quando la lunghezza del tweet non supera i 140 caratteri. Due caratteri sono riservati per il total tweets, che vengono compilati in seguito man mano che viene stampato ogni tweet nell'elenco.

Esempio di output:

(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.

Era esattamente quello di cui avevo bisogno. Questa soluzione è fantastica. Grazie @grc
iChux il

7

Rubino, 77 caratteri

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

Compresso la logica in una singola espressione regolare. Uscita di 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

Ruby, 75 anni

Non può battere Perl, ma almeno batte leggermente l'altra soluzione di Ruby. Nota che stampa i tweet in ordine inverso (il problema non ne specifica uno).

f=->t,i=1{t=~/\S.{,130}\S(?!\S)/?puts("(#{i}/%d) #$&"%n=f[$',i+1])||n :i-1}

1
Hm ... Suppongo di non aver specificato l'ordine. Ottimo lavoro che dirotta le regole. ;-)
Gaffi

1

VBA, 251

Ho provato un altro metodo ... Non abbastanza buono come il mio originale, ma ci sto ancora lavorando ...

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

Uscite:

(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.

1

BASH (88 caratteri)

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

Piega la riga a 132 caratteri (per consentire il conteggio dei nostri tweet), sugli spazi ( -s), Leggi il testo all'indietro (tac), numera il testo ( cat -n), riavvolgi (tac ). Inside Awk: prima riga (NR == 1), assegna alla lettera 'a' il valore nella prima. Svuota la colonna numerica. Stampa (NR / 'a') quindi la linea.

Produzione:

(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.

Sono fiducioso che esiste un comando bash più breve, che ha abusato di wc -l
Pureferret

1

Javascript (solo FF), 92 caratteri

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

Formattato, è una fregatura dello script 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

Uscite:

(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.

0

Javascript (solo FF), 135 caratteri

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

Formattato, questo è:

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

Penso che sia più intelligente della mia risposta più breve
Non che Charles il

0

PHP, 233

Sono corretto nel ritenere che questa è la prima risposta che non tradisce la parte di conteggio?
(Funziona anche con più di 99 tweet; potrei radere via altri due byte se in tal caso consentissi un ciclo infinito.)

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";
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.