Bố cục văn bản trong cột


8

Viết chương trình hoặc hàm cho một số văn bản, một số cột và chiều rộng cột, định dạng văn bản thành các cột. Đây là văn bản đơn giản .

Quy tắc

Đầu vào

  • Văn bản sẽ là một chuỗi ASCII có thể in và có thể chứa dòng mới và dấu cách (nhưng không phải là tab).
  • Số lượng cột sẽ là một số nguyên dương.
  • Độ rộng cột là một số nguyên lớn hơn hoặc bằng 2 chỉ định có bao nhiêu ký tự trên mỗi cột.

Đối với thử thách này, một từ sẽ bao gồm bất kỳ ký tự không phải khoảng trắng nào. Đầu vào bao gồm một chuỗi và hai số nguyên, có thể được lấy theo bất kỳ thứ tự nào.

Đầu ra

Đầu ra là văn bản được định dạng thành các cột cân bằng với càng nhiều từ trên mỗi dòng sẽ phù hợp.

  • Nếu một từ quá dài để vừa với một cột, hãy đặt từ đó vào dòng tiếp theo nếu có một từ khác trên dòng hiện tại và dòng có thể được đệm vào chiều rộng cột có ba khoảng trắng hoặc ít hơn.
  • Mặt khác, gạch nối từ để nó lấp đầy phần còn lại của dòng. Hyphenate bất cứ nơi nào dòng kết thúc; đừng lo lắng về việc gạch nối giữa các âm tiết.
  • Các cột phải được phân tách bằng một lề gồm bốn ký tự khoảng trắng.
  • Các cột phải được cân bằng sao cho tất cả chúng đều có số dòng bằng nhau nếu có thể.
  • Các cột ngoài cùng bên trái nên có thêm một dòng nếu cần thiết.
  • Bất kỳ ngắt dòng và nhiều không gian nên được bảo tồn. Không gian lưu trữ là tùy chọn sau cột cuối cùng.

Ví dụ

Bản văn:

The number of columns will be a positive integer.  Columns should be separated by a margin of four space characters.

The columns should be balanced.  The column width is greater than two.

Cột: 3, chiều rộng: 10

The number    separated     ns should 
of columns    by a marg-    be balanc-
will be a     in of four    ed.  The  
positive      space cha-    column wi-
integer.      racters.      dth is gr-
Columns                     eater than
should be     The colum-    two.      

Bản văn:

This line is hyphenated.
This line, on the other hand, is not.  

Cột: 1, chiều rộng: 20

This line is hyphen-
ated.               
This line, on the
other hand, is not.

Văn bản: Tiny columns.cột: 4, chiều rộng: 2

T-    c-    u-    s.
i-    o-    m-      
ny    l-    n-

Văn bản: Two spaces.<space>cột: 5, chiều rộng: 2

T-          p-    c-    s.
wo    s-    a-    e-

Văn bản: <newline>A phrasecột: 2, chiều rộng: 5

         rase
A ph-

Văn bản: A short sentence.cột: 10, chiều rộng: 5

A sh-    ort      sent-    ence.

Văn bản: It's "no word" 1234567890 -+-+-+-+ (*&!)cột: 3, chiều rộng: 6

It's      12345-    +-+
"no       67890     (*&!)
word"     -+-+--

Đây là ; quy tắc tiêu chuẩn áp dụng.



4
@Mego Các thách thức có liên quan, tuy nhiên, điều này đòi hỏi phải gạch nối một số từ nhất định và các cột cân bằng, vì vậy tôi nghĩ rằng nó đủ khác nhau.
intrepidcoder

s:'tiny', c:4, w:2= t- i- n- yhay t- i- ny??
TFeld

@TFeld Ví dụ của tôi đã sai, nó nên như vậy t- i- ny. Là tất cả mọi thứ ngay bây giờ, hoặc tôi cần phải sửa chữa nó một lần nữa?
intrepidcoder

Không chắc chắn, nên tiny st- i- n- y_ shayt- i- ny s
TFeld

Câu trả lời:


1

Python 2, 346 338 byte

i,C,W=input()
r=[]
for l in [x or' 'for x in i.split('\n')]:
 while l:
  if' '==l[0]:l=l[1:]
  w=l[:W];x=W;s=w.rfind(' ')+1
  if max(W-3,0)<s:w=w[:s];x-=W-s
  elif x<len(l)and' 'not in l[x:x+1]:w=w[:-1]+'-';x-=1
  r+=[w];l=l[x:]
r=[s.ljust(W)for s in r+['']*(C-1)]
print'\n'.join('    '.join(s)for s in zip(*zip(*[iter(r)]*((len(r))/C))))

Nhập như 'string',C,W


Cảm ơn, đã sửa bằng cách thay đổi thành rstrip().
TFeld

Tuyệt quá! Điều đó giúp tôi tiết kiệm strip()vào cuối.
TFeld

0

C ++ 414

Cảm ơn @ceilingcat cho một số bài đánh gôn rất hay - giờ thậm chí còn ngắn hơn

#import<bits/stdc++.h>
#define b t.push_back
#define r l.substr
using namespace std;main(int n,char**a){int i=0,j,m,p,c=atoi(a[1]),w=atoi(a[2]);vector<string>t;for(string l;getline(cin,l);)for(;p=l.find_last_of(" \n",w),p-string::npos&&p>w-4?b(r(0,p)),l=r(p+1):w/l.length()?b(l),l="":(b(r(0,w-1)+"-"),l=r(w-1)),l.length(););for(m=~-t.size()/c+1;i<m;i+=puts(""))for(j=0;j<c;b(""))cout<<left<<setw(w+4)<<t[i+j++*m];}

Hãy thử trực tuyến!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.