Căn chỉnh văn bản thành một khối


10

Bài tập

Nhiệm vụ của bạn là viết toàn bộ chương trình, nó sẽ căn chỉnh đầu vào đã cho vào một khối có kích thước nhất định.

Đầu vào:

40
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Đầu ra:

Lorem  ipsum dolor sit amet, consectetur
adipiscing  elit,  sed do eiusmod tempor
incididunt  ut  labore  et  dolore magna
aliqua.  Ut  enim  ad minim veniam, quis
nostrud   exercitation  ullamco  laboris
nisi ut aliquip ex ea commodo consequat.
Duis  aute  irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu
fugiat  nulla  pariatur.  Excepteur sint
occaecat cupidatat non proident, sunt in
culpa  qui  officia deserunt mollit anim
id est laborum.
                <-- note the linebreak

Chi tiết đầu vào

  • Bạn phải viết toàn bộ chương trình thực thi / có thể diễn giải.
  • Bạn có thể cho rằng, đầu vào chỉ chứa các ký tự ASCII có thể in và không chứa tab \t.
  • Đầu vào có thể chứa ngắt dòng. Nếu nó không như vậy, họ được cho là \n, \rhoặc \r\ntùy thuộc vào những gì bạn mong đợi. Tuy nhiên, chúng được thống nhất trong toàn bộ đầu vào.
  • Đầu vào có thể được đưa ra trong STDIN hoặc dưới dạng đối số dòng lệnh. Bạn có thể sử dụng cả hai nếu phù hợp với nhu cầu của bạn (ví dụ: đọc kích thước khối từ lệnh args và nhập dưới dạng stdin). Tuy nhiên, bạn không được mã hóa bất kỳ phần nào của đầu vào cho chương trình của bạn.
  • Bạn có thể giả sử rằng kích thước khối được cho là số dương ( > 0) hợp lệ .
  • Ngắt dòng trong đầu vào được xử lý giống như một khoảng trắng (do đó là dấu tách từ)
  • Nếu đầu vào chứa nhiều không gian đồng thời, chúng được coi là một.

Chi tiết đầu ra

  • Đầu ra phải được định dạng thành một khối có kích thước nhất định. Việc định dạng được thực hiện bằng cách thêm khoảng trắng giữa các từ.
  • Số lượng khoảng trắng giữa các từ trên một dòng phải bằng nhau cho dòng đó. Nếu không thể, các khoảng trắng bổ sung phải được thêm từng cái một sau các từ bắt đầu từ bên trái.
  • Nếu từ dài hơn kích thước khối đã cho, nó sẽ đứng một mình trên một dòng (và sẽ vượt quá kích thước khối).
  • Nếu đầu ra chỉ chứa một từ, nó sẽ được căn sang trái.
  • Dòng cuối cùng của đầu ra phải được căn bên trái, chỉ có một khoảng trắng giữa các từ. Dòng cuối cùng của đầu ra phải kết thúc bằng ngắt dòng.

Câu trả lời, với số byte ngắn nhất sau một thời gian, sẽ thắng.
Nếu bạn cần thêm thông tin, hãy để lại nhận xét.

Các trường hợp thử nghiệm

Input:
10
Lorem ipsum dolor sit amet,
consectetur adipiscing elit, sed do eiusmod tempor

Output:
Lorem
ipsum
dolor  sit
amet,
consectetur
adipiscing
elit,  sed
do eiusmod
tempor

Input:
20
Lorem     ipsum

dolor  sit amet,

Output:
Lorem   ipsum  dolor
sit amet,

Input:
1
Lorem ipsum dolor sit amet

Output:
Lorem
ipsum
dolor
sit
amet

Liên quan. (Cuối cùng là một thử thách thứ hai cho thẻ typography của tôi đã bị xóa tự động .;))
Martin Ender

@ MartinBüttner Tôi không biết rằng thẻ đó tồn tại.
Zereges

@ Vɪʜᴀɴ Bạn phải viết toàn bộ chương trình thực thi / có thể hiểu được.
Dennis


@ppperry Thú vị, vì một số lý do, nó đã tránh các kỹ năng tìm kiếm của tôi
Zereges

Câu trả lời:



1

Ruby, 179 ký tự

n=gets.to_i
s=t=''
$<.read.split.map{|w|if(t+w).size>=n
0while t.size<n&&(1..n).any?{|i|t.sub!(/[^ ]#{' '*i}(?=[^ ])/){|x|x+' '}}
s+=t+?\n
t=w
else
t+=' '+w
t.strip!
end}
puts s,t

Quá dài ...

Phiên bản bán vô dụng:

n = gets.to_i
s = t = ''
$<.read.split.map{|w|
    if (t + w).size >= n
        0 while t.size < n && (1..n).any?{|i|t.sub!(/[^ ]#{' '*i}(?=[^ ])/){|x|x+' '}}
        s += t + ?\n
        t = w
    else
        t += ' ' + w
        t.strip!  # this is only necessary because of the very first word >:(
    end
}
puts s,t

0

CJam, 87 byte

l~:LS*qNSerS%{(2$1$a+_S*,L>{;a\}{\;@;\}?}h;S*a]1>{I1>{LIs,-I,(md1b\aI,(*.+Sf*I.\}I?N}fI

Điều này vẫn nên được chơi golf. Hãy thử trực tuyến trong trình thông dịch CJam .


0

Võng mạc , 133 byte

\s+

+`((1)*1 )((?<-2>.)*\S|\S+) 
:$3<LF>$1
m+`^(?=.(.)+$[^<TB>]*^(?>(?<-1>1)+)1)((.*):(\S+ +)|(\S+ +)(.*):)
$3$4$5 :$6
+`:|<LF>1+| (?= .*$)
<empty>

Các <empty>đại diện cho một dòng dấu trống. Để chạy mã, hãy đặt từng dòng trong một tệp riêng biệt, thay thế <LF>bằng các ký tự dòng (0x0A) và <TB>bằng một tab (0x09). Tôi sẽ thêm một lời giải thích khi tôi chơi golf.

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.