จัดรูปแบบ Drop Capital


21

บทนำ

เขียนโปรแกรมหรือฟังก์ชั่นที่เพิ่มตัวพิมพ์ใหญ่ในย่อหน้า โปรแกรมจะป้อนข้อความเพื่อจัดรูปแบบความกว้างคอลัมน์และจำนวนบรรทัดที่จะลดทุน ตัวพิมพ์ใหญ่มีลักษณะดังนี้:

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

นี่คือความท้าทายที่เกี่ยวข้องกับการ

อินพุต

  • ป้อนสตริงของอักขระ ASCII ที่พิมพ์ได้ (ไม่มีแท็บหรือบรรทัดใหม่) และ 2 จำนวนเต็มมากกว่าหนึ่ง
  • หนึ่งจำนวนเต็มคือจำนวนคอลัมน์ที่เอาต์พุตควรมี
  • อีกเส้นคือจำนวนเส้นที่ทอดโดยทุนที่ปล่อย
  • สตริงข้อความมีคำที่คั่นด้วยช่องว่างเดียว
  • สมมติว่าไม่มีคำใดยาวเกินความกว้างของคอลัมน์ นั่นคือ,column width > longest word + drop capital height
  • ทุกบรรทัดจะมีอย่างน้อยหนึ่งคำ
  • สำหรับความท้าทายนี้คำประกอบด้วยอักขระใด ๆ นอกเหนือจากช่องว่าง
  • อินพุตอาจอยู่ในรูปแบบที่สะดวกตามกฎด้านบน

เอาท์พุต

  • บล็อกข้อความชิดซ้ายที่มีตัวพิมพ์ใหญ่และจำนวนบรรทัดที่ระบุ
  • บรรทัดควรมีคำให้มากที่สุดโดยไม่ยาวเกินความกว้างคอลัมน์
  • มีช่องว่างระหว่างการลดทุนและส่วนที่เหลือของแต่ละบรรทัด
  • อนุญาตหนึ่งช่องว่างต่อท้ายหรือขึ้นบรรทัดใหม่

ตัวอย่าง

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.

นี่เป็นและมีช่องโหว่มาตรฐาน


3
เย้ท้าทายการพิมพ์อีกครั้ง! เราต้องการสิ่งเหล่านี้มากกว่านี้
ETHproductions

2
จะเกิดอะไรขึ้นเมื่อคำที่มีความยาวมากกว่าความกว้างของคอลัมน์คือตัวอย่างThe quick brown fox jumped over the unenthusiastic dogใด ๆ จากสามตัวอย่างแรก?
MickyT

@MickyT สมมติว่าไม่มีคำใดยาวเกินความกว้างของคอลัมน์ นั่นคือcolumn width > longest word + drop capital height
intrepidcoder

เกิดอะไรขึ้นถ้าเส้นทุนใหญ่กว่าบรรทัดข้อความ? กล่าวคือ L:4,C:100,T:'Stuff'
TFeld

นอกจากนี้ยังสามารถLines = 1?
TFeld

คำตอบ:


1

Python 2, 202 ไบต์

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)

โทรมา f(Lines, Columns, Text)

f(4,100,'Stuff') จะช่วยให้

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

1

C #, 244 ไบต์

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

การเยื้องบรรทัดใหม่และความคิดเห็นเพื่อความชัดเจน:

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);
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.