Buat Parser Twitter


14

pengantar

Anda menggunakan Twitter (mari berpura-pura, jika tidak), di mana Anda dibatasi hingga 140 karakter per tweet individu yang ingin Anda bagikan dengan dunia. Jika Anda ingin mengirim tweet ke alamat Gettysburg dari Abraham Lincoln , maka Anda perlu memecah teks menjadi beberapa bagian 140 karakter untuk mengeluarkan seluruh pesan. Namun, potongan-potongan itu tidak selalu harus tepat 140 karakter. Katakanlah misalnya, kami memecah pidato menjadi potongan 17-karakter, kami akan berakhir dengan tweet ini:

  • EMPAT SKOR DAN SE
  • VEN TAHUN YANG LALU KAMI
  • AYAH DIPEROLEH
  • FORTH ON CON INI
  • TINENT A NATI BARU
  • DI BANDINGKAN DI L
  • (dan seterusnya)

Itu tidak baik! Ketika kata-kata individual dipecah, maka akan sulit untuk memahami apa yang ingin Anda katakan. Juga, di twitterverse, salah satu pengikut Anda mungkin menemukan tweet tertentu dan tidak menyadari bahwa ada lebih banyak pesan, sehingga Anda ingin memberi nomor pada tweet Anda sehingga mereka memiliki beberapa konteks untuk bekerja dengan (masih menggunakan potongan 17 karakter ):

  • (1/7) EMPAT SKOR DAN
  • (2/7) TUJUH TAHUN YANG LALU
  • (3/7) AYAH KAMI
  • (4/7) DIPEROLEH UNTUK
  • (5/7) KONTINEN INI A
  • (6/7) BANGSA BARU
  • (7/7) DIKONSTRUKSI DI ...

Anda dapat secara manual mengetahui konfigurasi terbaik untuk tweet Anda dengan tangan, tetapi untuk itulah kami memiliki komputer!

Tantangan

Dalam kode sesingkat mungkin, parsing Alamat Gettysburg (atau teks apa pun, tapi kami akan tetap menggunakan yang ini sebagai contoh) ke dalam serangkaian tweet yang terdiri dari tidak lebih dari 140 karakter (asumsikan ASCII, karena teks contoh kami seharusnya tidak memiliki bit yang tidak biasa / tidak biasa di dalamnya).

Detail

  • Fungsi / program / etc Anda harus menggunakan argumen string tunggal dan menghasilkan satu baris teks untuk setiap tweet.
    • Asumsikan input ini tidak akan pernah menghasilkan lebih dari 99 total tweet ketika diuraikan, terlepas dari bagaimana Anda memilih untuk mengurai (selama pilihan itu masih cocok dengan poin lain dari tantangan).
  • Tweet harus menyertakan tweet numberdari total tweetsindikator dalam format " (x/y)" sebelumnya tubuh tweet.
    • Hitungan ini akan mengambil bagian dari ruang 140 karakter Anda!
  • Potongan Tweet hanya dapat dibagi pada baris atau spasi baru.
    • Tanda hubung, titik, koma, atau tanda baca lainnya tidak diizinkan, kecuali segera didahului atau diikuti oleh spasi atau baris baru.
  • Tweet harus terdiri dari kata-kata lengkap sebanyak mungkin.
    • Batasan ini sedikit fleksibel, misalnya ketika tweet terakhir Anda hanya memiliki satu kata
  • Ini kode golf, jadi kode terpendek menang.

Teks Lengkap Alamat Gettysburg

(Kode Anda tetap dapat menangani string ASCII yang diteruskan ke sana.)

EMPAT NILAI DAN TUJUH TAHUN YANG LALU, AYAH KITA DIPEROLEH DENGAN KONTINEN INI, SEBUAH BANGSA BARU YANG DITENTUKAN DALAM LIBERTY DAN BERDEDIKASI DENGAN PROPOSISI YANG SEMUA ORANG DICIPTAKAN SECARA EQUAL. SEKARANG KITA TERLIBAT DALAM PERANG SIPIL BESAR PENGUJIAN BAIK BANGSA ATAU BANGSA APA PUN YANG DICIPTAKAN DAN BEGITU BERDEDIKASI BISA TAHAN LAMA. KAMI BERTEMU PADA BATTLEFIELD BESAR DARI PERANG YANG. KAMI TELAH DATANG UNTUK MENYEDIAKAN BAGIAN DARI BIDANG YANG SEBAGAI TEMPAT PENYELESAIAN AKHIR UNTUK MEREKA YANG TELAH MEMBERI HIDUP MEREKA YANG BANGSA YANG MUNGKIN LANGSUNG. ITU SANGAT COCOK DAN PROPER YANG KAMI HARUS MELAKUKAN INI. TETAPI DALAM SENSE YANG LEBIH BESAR KITA TIDAK BISA DEDICATE, KITA TIDAK BISA CONSECRATE, KAMI TIDAK BISA HALLOW, GROUND INI. THE BRAVE PRIA HIDUP DAN MATI SIAPA YANG BERJUANG DI SINI TELAH MENGHADAPI SEJAUH DI ATAS KEKUATAN MISKIN KAMI UNTUK MENAMBAHKAN ATAU DETRAK. DUNIA AKAN KECIL CATATAN NORA PANJANG INGAT APA YANG KITA KATAKAN DI SINI TETAPI TIDAK PERNAH LUPAKAN APA YANG MEREKA LAKUKAN DI SINI. ITU ADALAH BAGI KITA SEPERTI YANG HIDUP UNTUK DEDIKASI DI SINI UNTUK PEKERJAAN YANG TIDAK SELESAI YANG MEREKA YANG TELAH MENCARI DI SINI. LEBIH BANYAK BAGI KITA UNTUK BERADA DI SINI UNTUK BERDEDIKASI DENGAN TUGAS YANG SANGAT TINGGAL SEBELUM KITA, YANG DARI MATI TERHADAP KAMI MENGAMBIL PERUBAHAN YANG MENYEBUTKAN BAHWA MEREKA MEMILIKI TINDAKAN PENUH PENUH UNTUK DEVOSI, BAHWA KITA TIDAK HARUS MENINGGALKANNYA. TELAH MENINGGAL DI VAIN, BAHWA BANGSA INI DI BAWAH ALLAH AKAN MEMILIKI KELAHIRAN KEBEBASAN BARU, DAN BAHWA PEMERINTAH ORANG-ORANG OLEH ORANG-ORANG UNTUK ORANG-ORANG YANG TIDAK AKAN HINGGA DARI BUMI.


Dalam contoh tweet Anda, Anda telah melanggar kata-kata - tetapi dalam aturan, Anda mengatakan tidak melakukannya. Harap buat ini konsisten - baik mengubah aturan atau contoh.
stan

@ bowby Ya, contohnya adalah untuk secara eksplisit menunjukkan apa yang tidak diizinkan ... Saya akan melihat apakah saya tidak dapat mengucapkannya kembali.
Gaffi

Harap jelaskan pertanyaan ini untuk memperjelas apakah jawaban harus berurusan dengan kemungkinan harus mengkomputasi ulang kata -> paket tweet karena bagian (X / Y). Hal ini membuat masalah semakin sulit dan memperkenalkan batasan pada pesan terbesar yang dapat dikomunikasikan tanpa mengode data di bagian (X / Y).
arrdem

@ rmckenzie Maaf, tidak yakin apakah saya mengerti? Anda bermaksud menjelaskan fakta bahwa Anda bisa memiliki 100+ tweet dalam satu set?
Gaffi

@Gaffi - Ya, adakah jumlah bagian maksimum di mana pesan kami akan dibagi (dalam hal ini asumsi dapat dibuat dan sol grc valid) atau apakah kami harus mendukung kasus umum seperti membuat serialisasi kata beribu-ribu kata untuk tweet yang pernyataan masalah Anda seperti yang disarankan.
arrdem

Jawaban:


12

Perl, 51 Karakter

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

Memerlukan command prompt -p, termasuk 1 karakter.

Penjelasan: masukkan bagian hitung sebelum dan baris baru setelah grup kata hingga 132 karakter. Masukkan placeholder ( ~) untuk total, yang kemudian diganti dengan subtitusi kedua. Ini pecah jika pesan berisi ~, tetapi orang dapat dengan mudah menggunakan karakter yang tidak patut dicetak.

Sedikit curang: selalu memungkinkan tujuh karakter untuk bagian hitungan, (nn/nn) ,. Sungguh, jika (n/n)itu harus memungkinkan dua karakter tambahan. Namun, solusi sewenang-wenang untuk ini akan sangat meningkatkan kompleksitas masalah.


\Gtidak berguna di sini, bukan?
user2846289

26

Python, 140

^ 140 karakter sebenarnya adalah kebetulan.

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

Sementara ada kata-kata yang tersisa, solusinya akan membuat tweet baru dari persediaan kata-kata dan menambahkannya ke daftar. Untuk setiap tweet, ia akan terus mencoba menambahkan kata-kata sampai panjang tweet mencapai lebih dari 140 karakter. Dua karakter dicadangkan untuk total tweets, yang diisi kemudian karena setiap tweet dalam daftar dicetak.

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

Persis seperti yang saya butuhkan. Solusi ini keren. Terima kasih @grc
iChux

7

Ruby, 77 karakter

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

Dikemas logika menjadi ekspresi reguler tunggal. Output dari 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

Tidak bisa mengalahkan Perl, tapi setidaknya sedikit mengalahkan solusi Ruby lainnya. Perhatikan bahwa ia mencetak tweet dengan urutan terbalik (masalahnya tidak menentukan satu tweet).

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

1
Hm ... saya kira saya tidak menentukan pesanan. Kerja bagus membajak aturan. ;-)
Gaffi

1

VBA, 251

Mencoba metode lain ... Tidak sebagus yang asli saya, tapi saya masih mengerjakannya ...

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

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 
(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 Chars)

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

Lipat garis dengan 132 karakter (untuk memungkinkan hitungan tweet kami), pada spasi ( -s), Baca teks mundur (tac), beri nomor teks ( cat -n), balikkan kembali ( tac). Di dalam Awk: Baris pertama (NR == 1), tetapkan huruf 'a' nilai di yang pertama. Kosongkan kolom nomor. Cetak (NR / 'a') lalu garis.

Keluaran:

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

Saya yakin ada perintah bash yang lebih pendek, yang menyalahgunakan wc-l
Pureferret

1

Javascript (hanya FF), 92 karakter

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

Diformat, itu adalah rip-off dari skrip 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

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 
(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 (hanya FF), 135 karakter

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

Diformat, yaitu:

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

Saya pikir ini lebih pintar daripada jawaban saya yang lebih pendek
Bukannya Charles

0

PHP, 233

Apakah saya benar dengan menganggap bahwa ini adalah jawaban pertama yang tidak curang pada bagian jumlah?
(Ini juga berfungsi dengan lebih dari 99 tweet; Saya bisa mencukur dua byte lagi jika saya mengizinkan loop tak terbatas dalam kasus itu.)

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";
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.