列内のテキストのレイアウト


8

テキスト、列数、および列幅を指定して、テキストを列にフォーマットするプログラムまたは関数を記述します。これは平文のです。

ルール

入力

  • テキストは印刷可能なASCIIの文字列であり、改行とスペースが含まれる場合があります(タブは含まれません)。
  • 列の数は正の整数になります。
  • 列幅は、列あたりの文字数を指定する2以上の整数です。

この課題では、単語は空白以外の文字で構成されます。入力は1つの文字列と2つの整数で構成され、任意の順序で取得できます。

出力

出力は、各行に収まるだけ多くの単語を含むバランスのとれた列にフォーマットされたテキストです。

  • 単語が長すぎて列に収まらない場合、現在の行に別の単語があり、その行は列の幅まで3つ以下のスペースで埋め込まれる可能性があります。
  • それ以外の場合は、単語のハイフンを付けて、残りの行を埋めます。行の終わりにハイフンを付ける; 音節間のハイフネーションについて心配する必要はありません。
  • 列は、4つのスペース文字のマージンで区切る必要があります。
  • 可能であれば、すべての列の行数が同じになるように、列のバランスをとる必要があります。
  • 左端の列には、必要に応じて追加の行が必要です。
  • 改行や複数のスペースは保持する必要があります。最後の列の後の末尾のスペースはオプションです。

テキスト:

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.

列:3、幅: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.      

テキスト:

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

列:1、幅:20

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

テキスト:Tiny columns.列:4、幅:2

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

テキスト:Two spaces.<space>列:5、幅:2

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

テキスト:<newline>A phrase列:2、幅:5

         rase
A ph-

テキスト:A short sentence.列:10、幅:5

A sh-    ort      sent-    ence.

テキスト:It's "no word" 1234567890 -+-+-+-+ (*&!)列:3、幅:6

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

これはです。標準ルールが適用されます。



4
@Mego課題は関連していますが、これは特定の単語をハイフンでつなぎ、列のバランスをとる必要があるため、十分に異なると思います。
intrepidcoder 2015年

ですs:'tiny', c:4, w:2= t- i- n- yt- i- ny??
TFeld 2015年

@TFeld私の例は間違っていましたt- i- ny。今はすべてですか、それとももう一度修正する必要がありますか?
intrepidcoder

必ず、すべきでないtiny sことt- i- n- y_ st- i- ny s
TFeld

回答:


1

Python 2、346 338バイト

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

次として入力 'string',C,W


ありがとう、に変更することで解決しましたrstrip()
TFeld 2015年

すごい!strip()最後に私を救います。
TFeld 2015年

0

C ++ 414

素晴らしいゴルフをしてくれた@ceilingcatに感謝-今ではさらに短い

#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];}

オンラインでお試しください!

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