Bir Damla Sermayeyi Biçimlendir


21

Giriş

Paragrafa büyük harf ekleyen bir program veya işlev yazın. Program formatlanacak metni, sütun genişliğini ve büyük harfle bırakılacak satır sayısını girecektir. Düşen başkentler şöyle görünür:

Lines:        2     3      4 
Drop capital: A|    A.|    A..|
              ~'    ..|    ...|    etc.
                    ~~'    ...|
                           ~~~'

Bu ile ilgili bir zorluktur.

Giriş

  • Yazdırılabilir bir ASCII karakter dizisi (sekme veya yeni satır yok) ve birden fazla 2 tam sayı girin.
  • Bir tamsayı çıktının sahip olması gereken sütun sayısıdır.
  • Diğeri, sermayenin bıraktığı hat sayısıdır.
  • Metin dizesi, tek boşluklarla ayrılmış sözcükler içerir.
  • Kelimelerin hiçbirinin sütun genişliğinden daha uzun olmayacağını varsayalım. Yani,column width > longest word + drop capital height
  • Tüm satırlarda en az bir kelime olacaktır.
  • Bu zorluk için, bir kelime bir boşluktan başka herhangi bir karakterden oluşur.
  • Girdi yukarıdaki kuralları izleyerek uygun bir biçimde olabilir.

Çıktı

  • Belirtilen satır sayısına sahip bir büyük harf içeren, soldan yaslanmış bir metin bloğu.
  • Bir satır, sütun genişliğinden daha uzun olmadan mümkün olduğu kadar çok kelime içermelidir.
  • Düşen sermaye ile her satırın kalanı arasında boşluk vardır.
  • Sondaki bir boşluk veya satırsonuna izin verilir.

Örnekler

Lines: 2 Columns: 10 Text: The quick brown fox jumped over the lazy dog.

T| he
~' quick
brown fox
jumped
over the
lazy dog.

Lines: 3 Columns: 10 Text: (Same as above)

T.| he
..| quick
~~' brown
fox jumped
over the
lazy dog.

Lines: 4 Columns: 10 Text: (Same as above)

T..| he
...| quick
...| brown
~~~' fox
jumped
over the
lazy dog.

Lines: 2 Columns: 80 Text: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor.

L| orem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus.
~' Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec
consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero
egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem
lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor.

Lines: 3 Columns: 80 Text: (Same as above)

L.| orem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus.
..| Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec
~~' consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget
libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta
lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non
tortor.

Lines: 4 Columns: 80 Text: (Same as above)

L..| orem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam
...| lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra
...| nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam
~~~' eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim,
ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies
a non tortor.

Bu ve standart boşluklar geçerlidir.


3
Yay, başka bir tipografi mücadelesi! Bunlardan daha fazlasına ihtiyacımız var.
ETHProductions,

2
Bir kelime sütun genişliğinden daha uzunsa, yani The quick brown fox jumped over the unenthusiastic dogilk üç örneğin herhangi biri için ne olur ?
MickyT

@MickyT Kelimelerin hiçbirinin sütun genişliğinden daha uzun olmayacağını varsayalım. Yani,column width > longest word + drop capital height
intrepidcoder

Büyük harfli satırlar metin satırından büyükse ne olur? Yani. L:4,C:100,T:'Stuff'
TF

Ayrıca, olabilir Lines = 1?
TFV

Yanıtlar:


1

Python 2, 202 bayt

def f(l,c,t):
 l-=1;s=['.'*l+'|']*l+['~'*l+"'"]
 s[0]=t[0]+s[0][1:];t=t[1:].split();j=0
 while t:
  w=t.pop(0)
  if len(s[j]+w)>=c:j+=1
  if j>=len(s):s.append(w)
  else:s[j]+=' '+w
 return '\n'.join(s)

Ara f(Lines, Columns, Text)

f(4,100,'Stuff') verir

S..| tuff
...|
...|
~~~'

1

C #, 244 bayt

string F(int d,int c,string t){var w=t.Substring(1).Split(' ');t=""+t[0];for(int i=0,x=c,y=0;i<w.Length;x+=w[i++].Length+1)t+=(1>(x=x+w[i].Length>c?0:x)?"\n"+(y++<d?(y<d?"| ":"' ").PadLeft(x=d+1,y<d?'.':'~'):""):" ")+w[i];return t.Remove(1,2);}

Girinti, yeni çizgiler ve netlik için yorumlar:

string F(int d,int c,string t){
    var w=t.Substring(1).Split(' ');
    t=""+t[0];
    for(int i=0,x=c,y=0;i<w.Length;x+=w[i++].Length+1)
        t+=(1>(x=x+w[i].Length>c?0:x)?"\n"+(y++<d?(y<d?"| ":"' ").PadLeft(x=d+1,y<d?'.':'~'):""):" ")+w[i];
    return t.Remove(1,2);
}
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.