テキストをブロックに揃えます


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で、またはコマンドライン引数として指定できます。必要に応じて、両方を使用できます(たとえば、コマンドの引数からブロックサイズを読み取り、標準入力として入力します)。ただし、プログラムへの入力の一部をハードコードすることはできません。
  • ブロックサイズが有効な正(> 0)の数値として指定されていると考えるかもしれません。
  • 入力の改行はスペースと同じように扱われます(つまり、単語の区切り文字です)。
  • 入力に複数の同時スペースが含まれる場合、それらは1つとして扱われます。

出力の詳細

  • 出力は、指定されたサイズのブロックにフォーマットする必要があります。書式設定は、単語の間にスペースを追加することによって行われます。
  • 行の単語間のスペースの数は、その行で等しくなければなりません。それが不可能な場合は、左から単語の後にスペースを1つずつ追加する必要があります。
  • 単語が指定されたブロックサイズよりも長い場合、1行で単独で表示されます(ブロックサイズを超えます)。
  • 出力に1語のみが含まれる場合は、左揃えになります。
  • 出力の最後の行は左に揃える必要があり、単語間のスペースは1つだけです。出力の最後の行は、末尾の改行で終了する必要があります。

しばらくしてからバイト数が最も少ない答えが優先されます。
追加情報が必要な場合は、コメントを残してください。

テストケース

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

関連。(最後に、すでに自動削除された私のタイポグラフィタグの2番目の課題です。))
Martin Ender

@MartinBüttner私はそのようなタグが存在することを知りませんでした。
Zereges

@Vɪʜᴀɴ 実行可能/解釈可能なプログラム全体を記述する必要があります。
Dennis、


@ppperry興味深いことに、何らかの理由で私の検索スキルが回避されました
Zereges '20年

回答:



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)に置き換えます。ゴルフが終わったら説明をつけます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.