Format Modal Drop

21

pengantar

Tulis sebuah program atau fungsi yang menambahkan setetes modal ke paragraf. Program akan memasukkan teks ke format, lebar kolom, dan jumlah baris untuk menjatuhkan ibukota. Ibukota drop terlihat seperti ini:

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

Ini tantangan terkait .

Memasukkan

  • Masukkan string karakter ASCII yang dapat dicetak (tanpa tab atau baris baru) dan 2 bilangan bulat lebih besar dari satu.
  • Satu integer adalah jumlah kolom yang seharusnya dimiliki oleh output.
  • Yang lainnya adalah jumlah garis yang direntang oleh ibukota drop.
  • String teks berisi kata-kata yang dipisahkan oleh spasi tunggal.
  • Asumsikan tidak ada kata yang lebih panjang dari lebar kolom. Itu adalah,column width > longest word + drop capital height
  • Semua baris memiliki setidaknya satu kata.
  • Untuk tantangan ini, sebuah kata terdiri dari karakter apa pun selain spasi.
  • Masukan mungkin dalam format yang sesuai dengan aturan di atas.

Keluaran

  • Blok teks yang dibenarkan kiri yang berisi modal drop dengan jumlah baris yang ditentukan.
  • Baris harus berisi kata-kata sebanyak mungkin tanpa lebih panjang dari lebar kolom.
  • Ada ruang antara ibukota drop dan sisa dari setiap baris.
  • Satu spasi tambahan atau baris baru diizinkan.

Contohnya

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.

Ini adalah dan celah standar berlaku.

intrepidcoder
sumber
3
Yay, tantangan tipografi lainnya ! Kami membutuhkan lebih banyak dari ini.
ETHproduk
2
Apa yang terjadi ketika sebuah kata lebih panjang dari lebar kolom, yaitu The quick brown fox jumped over the unenthusiastic doguntuk salah satu dari tiga contoh pertama?
MickyT
@MickyT Asumsikan tidak ada kata yang lebih panjang dari lebar kolom. Yaitu,column width > longest word + drop capital height
intrepidcoder
Bagaimana jika garis kapital lebih besar dari garis teks? Yaitu. L:4,C:100,T:'Stuff'
TFeld
Juga, bisakah Lines = 1?
TFeld

Jawaban:

1

Python 2, 202 byte

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)

Sebut sebagai f(Lines, Columns, Text)

f(4,100,'Stuff') memberi

S..| tuff
...|
...|
~~~'
TFeld
sumber
1

C #, 244 byte

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

Lekukan, baris baru, dan komentar untuk kejelasan:

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);
}
Makanan Tangan
sumber