将文本对齐块


10

任务

您的任务是编写整个程序,该程序会将给定的输入与给定大小的块对齐。

输入:

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.

输出:

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

输入详细信息

  • 您必须编写整个可执行/可解释程序。
  • 您可能会假设输入仅包含可打印的ASCII字符,并且不包含tab \t
  • 输入可以包含换行符。如果它这样做,他们给出\n\r\r\n取决于你所期望的。但是,它们在整个输入中是统一的。
  • 输入可以使用STDIN或命令行参数给出。如果适合您,可以同时使用它们(例如,从命令args读取块大小并将其输入为stdin)。但是,您可能无法对输入的任何部分进行硬编码。
  • 您可能会假设块大小为有效的正(> 0)数字。
  • 输入中的换行符与空格的处理方式相同(因此是单词分隔符)
  • 如果输入包含多个并发空间,则将它们视为一个。

输出细节

  • 必须将输出格式化为给定大小的块。通过在单词之间添加空格来完成格式化。
  • 一行上单词之间的空格数必须等于该行。如果不可能,则必须在从左开始的单词之后一一添加额外的空格。
  • 如果单词长于给定的块大小,它将在一行上单独显示(并超过块大小)。
  • 如果输出只包含一个单词,则将其向左对齐。
  • 输出的最后一行必须向左对齐,单词之间只有一个空格。输出的最后一行必须以尾随换行符结尾。

一段时间后,字节数最短的答案将获胜。
如果您需要其他信息,请发表评论。

测试用例

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

有关。(最后是我的版式标签已经被自动删除的第二个挑战。;))
马丁·恩德

@MartinBüttner我不知道这样的标签存在。
Zereges 2015年

@Vɪʜᴀɴ 您必须编写整个可执行/可解释程序。
丹尼斯


@ppperry有趣的是,由于某种原因,它避免了我的搜索技能
Zereges 2015年

Answers:



1

Ruby,179个字符

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

太久了...

半脱胶版:

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个字节

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

这应该仍然是可打高尔夫球的。在CJam解释器中在线尝试。


0

视网膜,133字节

\s+

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

所述<empty>表示空尾线。要运行代码,请将每一行放在单独的文件中,<LF>并用换行符(0x0A)和<TB>制表符(0x09)代替。打完高尔夫球后,我会加一个解释。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.