Twitter Ayrıştırıcı oluşturun


14

Giriş

Dünyayla paylaşmayı düşündüğünüz her bir tweet için 140 karakterle sınırlı olduğunuz Twitter'ı kullanıyorsunuz (haydi yapalım) Takipçilerinize Abraham Lincoln'ün Gettysburg Adresini tweetlemek isterseniz, tüm mesajı almak için metni 140 karakterlik birden fazla parçaya bölmeniz gerekir. Ancak, bu parçalar her zaman tam olarak 140 karakter uzunluğunda olmamalıdır. Örneğin, konuşmayı 17 karakterlik parçalara ayırdık, sonunda bu tweetlerle sonuçlanırdık:

  • DÖRT PUAN VE SE
  • VEN YIL ÖNCE BİZİM
  • BABALAR İLETİŞİM
  • BU KONU ÜZERİNE
  • YENİ BİR NATI ON
  • L'DE ANLAŞILAN
  • (ve bunun gibi)

Bu iyi değil! Bireysel kelimeler bozulduğunda, ne söylemeye çalıştığınızı anlamak zor olabilir. Ayrıca, twitterverse'te, takipçilerinizden biri belirli bir tweet ile karşılaşabilir ve mesajda daha fazlası olduğunu fark etmeyebilir, bu nedenle tweet'lerinizi çalışmak için bir bağlam oluşturacak şekilde numaralandırmak isteyeceksiniz (hala 17 karakterlik parçalar kullanıyor) ):

  • (1/7) DÖRT PUAN VE
  • (2/7) YEDİ YIL ÖNCE
  • (3/7) BABALARIMIZ
  • (4/7) UZAKTAN KÖKEN
  • (5/7) BU SÜREKLİ A
  • (6/7) YENİ ULUS
  • (7/7) ANLAYIŞ ...

Elinizdeki tweetler için en iyi yapılandırmayı el ile anlayabilirsiniz, ancak bilgisayarlarımız budur!

Meydan okuma

Mümkün olan en kısa kodda, Gettysburg Adresini (veya herhangi bir metni ayrıştırın, ancak örnek olarak bu adrese sadık kalacağız) 140 karakterden fazla olmayan bir dizi tweet'e (ASCII olduğunu varsayalım, çünkü örnek metnimiz herhangi bir nadir / olağandışı bit).

ayrıntılar

  • İşleviniz / programınız / vb. Tek bir dize bağımsız değişkeni almalı ve her tweet için bir metin satırı çıkarmalıdır.
    • Nasıl ayrıştırmayı seçtiğinize bakılmaksızın, bu girdinin ayrıştırıldığında hiçbir zaman toplam 99'dan fazla tweet ile sonuçlanmayacağını varsayalım (bu seçim yine de zorluğun diğer noktalarına uyduğu sürece).
  • Tweetler bir eklemek gerekir tweet numberarasında total tweets"biçiminde bir gösterge (x/y)Tweet'inize gövdesini önceki".
    • Bu sayı 140 karakterlik alanınızın bir bölümünü kaplayacak!
  • Tweet parçaları yalnızca satırlara veya boşluklara bölünebilir.
    • Hemen öncesinde veya sonrasında boşluk veya yeni satır gelmedikçe tire, nokta, virgül veya başka noktalama işaretlerine izin verilmez.
  • Tweetler mümkün olduğunca çok sayıda tam kelimeden oluşmalıdır.
    • Bu kısıtlama biraz esnektir, örneğin son tweet'iniz yalnızca bir kelimeye sahip olduğunda
  • Bu kod golf, bu yüzden en kısa kod kazanır.

Gettysburg Adresinin Tam Metni

(Kodunuz yine de kendisine iletilen ASCII dizelerini işleyebilmelidir.)

DÖRT PUAN VE YEDİNCİ YILLAR BABALARIMIZ BU SÜREÇE DAHA YÜKSELDİ, ÖZGÜRLÜKTE KAVRAMAN VE TÜM ERKEKLERİN EŞİT OLDUĞU ÖNERİLEN YENİ BİR ULUS ŞİMDİ, MİLLET VEYA HERHANGİ BİR GELECEĞİN VE DEDİKTE EDİLEN UZUN SÜRECEĞİNDE BÜYÜK BİR SİVİL SAVAŞ TESTİNE KATILDIK. SAVAŞIN BÜYÜK BİR SAVAŞIYLA BULUŞUYORUZ. ULUSLARARASI YAŞAYABİLECEKLERİ YAŞAYANLAR İÇİN NİHAİ BİR DİNLENME YERİ OLARAK BU ALANIN BİR KISIMINI GÖREVLİYORUZ. BUNU YAPMALIĞIMIZ ALTOGETHER UYUMLU VE UYGUN. AMA BÜYÜK BİR DUYULUĞU KABUL ETMİYORUZ, BİZ KEŞFEDİYORUZ, BU ZEMİNİ SALON EDEMİYORUZ. BURADA GÜÇLENEN YAŞAYAN VE ÖLENEN BRAVE ERKEKLER, EKLEMEK VEYA DÜZELTME İÇİN ZOR GÜCÜMÜZ ÜZERİNDEN UZAKTAN KAVRAMIYOR. DÜNYA KÜÇÜK NOT NOT BURADA NE DEDİĞİMİZ NOR UZUN UNUTMAK ANCAK BURADA NELERİ UNUTTUĞUNU ASLA UNUTAMAZ. BİZİM İÇİN BU KADAR BU KADAR ÇOK İLERİ GELİŞTİRİLMİŞ OLMAYAN ÇALIŞMAYA DESTEKLENECEK YAŞAM DERECESİ. BURADAN ÖNCE BÜYÜK TAM ÖLÇÜMÜ ALDIĞIMIZ BÜYÜK TAM ÖLÇÜMÜ ALDIĞIMIZ İÇİN BU DAHA YÜKSEK ÇEKİM ALDIĞIMIZ AŞAĞIDIR. Bu ulusun Tanrı'nın altındaki yeni bir özgürlük doğduğunu ve insanların insanlar tarafından toprağın yaşamaması gereken boşuna öldü.


Örnek tweet'lerinizde kelimeleri kırdınız - ama kurallarda değil demelisiniz. Lütfen bunu tutarlı hale getirin - kuralları veya örnekleri değiştirin.
boothby

@boothby Şey, neye izin verilmediğini açıkça göstermektir ... Bunu yeniden söyleyemediğimi göreceğim.
Mart'ta Gaffi

Cevapların (X / Y) kısmı nedeniyle kelimeyi yeniden hesaplama zorunluluğu -> tweet paketleri ile ilgili olup olmadığını netleştirmek için lütfen soruyu netleştirin. Bu, sorunu önemli ölçüde zorlaştırır ve (X / Y) bölümündeki verileri kodlamadan iletişim kurabileceği en büyük iletiye bir sınır ekler.
arrdem

@rmckenzie Üzgünüm, seni alacağımdan emin değil misin? Bir sette 100'den fazla tweet alabileceğinizi mi kastediyorsunuz?
Mart'ta Gaffi

@Gaffi - Evet, mesajlarımızın bölüneceği maksimum sayıda parça var mı (bu durumlarda varsayımlar yapılabilir ve grc'nin solu geçerlidir) veya çok bine yakın bir kelimenin serileştirilmesi gibi genel durumu desteklememiz gerekir mi? sorun ifadenizin önerdiği bir tweet'e
arrdem

Yanıtlar:


12

Perl, 51 Karakter

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

-P komut satırı istemi gerektirir, 1 karakter dahil.

Açıklama: sayma bölümünü 132 karaktere kadar kelime gruplarından önce ve sonra yeni satır ekleyin. ~Toplam için bir yer tutucu ( ) ekleyin ; daha sonra ikinci bir ikame ile değiştirilir. İleti içeriyorsa ~bu kesilir, ancak bunun yerine yazdırılamaz bir karakter kullanılabilir.

Biraz hile yapar: sayım kısmı için her zaman yedi karaktere izin verir (nn/nn). Gerçekten, eğer (n/n)iki ekstra karaktere izin vermelidir. Bununla birlikte, buna keyfi bir çözüm sorunun karmaşıklığını büyük ölçüde artıracaktır.


\Gburada işe yaramaz, değil mi?
user2846289

26

Python, 140

^ 140 karakter aslında bir rastlantıydı.

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

Kalan kelimeler olsa da, çözüm kelimelerin sağlanmasından yeni tweetler oluşturacak ve bunları bir listeye ekleyecektir. Her bir tweet için, tweet'in uzunluğu 140 karaktere ulaşana kadar kelime eklemeye devam edecektir. total tweetsListedeki her tweet yazdırılırken daha sonra doldurulacak olan iki karakter ayrılır .

Örnek çıktı:

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

Tam da ihtiyacım olan şey buydu. Bu çözelti iyidir. Thanks @grc
iChux

7

Ruby, 77 karakter

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

Mantığı tek bir normal ifadeye paketledi. Çıktı 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

Yakut, 75

Perl'i yenemez, ama en azından diğer Ruby çözümünü marjinal olarak yener. Tweetleri ters sırada yazdırdığını unutmayın (sorun bir tane belirtmez).

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

1
Hım ... Sanırım siparişi belirtmedim. Kuralları ele geçirmek iyi iş. ;-)
Gaffi

1

VBA, 251

Başka bir yöntem denedim ... Orijinalim kadar iyi değil, ama hala üzerinde çalışıyorum ...

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

Çıktılar:

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

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

Satırı 132 karakterde (tweet sayımımıza izin vermek için), boşluklarda ( -s), Metni geriye doğru oku (tac), metni numaralandır ( cat -n), yeniden ters çevir ( tac). İç Hata: İlk satır (NR == 1), ilk harfine 'a' harfini atayın. Sayı sütununu boşaltın. Sonra çizgiyi (NR / 'a') yazdırın.

Çıktı:

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

Wc
-l'yi

1

Javascript (yalnızca FF), 92 karakter

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

Biçimlendirilmiş, bu Perl betiğinin bir soygunudur:

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

Çıktılar:

(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 (yalnızca 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+')'))}

Biçimlendirilmiş, bu:

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

Sanırım bu benim kısa
Charles

0

PHP, 233

Bunun sayma kısmında hile yapmayan ilk cevap olduğunu varsayarak doğru muyum?
(Ayrıca 99'dan fazla tweet ile çalışır; bu durumda sonsuz bir döngüye izin verirseniz iki bayt daha tıraş edebilirim.)

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";
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.