ドロップキャピタルのフォーマット


21

前書き

段落にドロップキャピタルを追加するプログラムまたは関数を作成します。プログラムは、書式設定するテキスト、列幅、および大文字を削除する行数を入力します。ドロップキャピタルは次のようになります。

Lines:        2     3      4 
Drop capital: A|    A.|    A..|
              ~'    ..|    ...|    etc.
                    ~~'    ...|
                           ~~~'

これは関連の課題です。

入力

  • 印刷可能なASCII文字(タブまたは改行なし)と1より大きい2つの整数の文字列を入力します。
  • 1つの整数は、出力に必要な列の数です。
  • もう1つは、ドロップキャピタルがまたがる行の数です。
  • テキスト文字列には、単一のスペースで区切られた単語が含まれます。
  • どの単語も列幅より長くなることはないと仮定します。 あれは、column width > longest word + drop capital height
  • すべての行には少なくとも1つの単語があります。
  • この課題では、単語はスペース以外の文字で構成されます。
  • 入力は、上記の規則に従って任意の便利な形式にすることができます。

出力

  • 指定された行数のドロップキャピタルを含むテキストの左寄せブロック。
  • 行には、列の幅より長くなることなく、できるだけ多くの単語を含める必要があります。
  • ドロップキャピタルと各行の残りの部分の間にスペースがあります。
  • 1つの末尾スペースまたは改行が許可されます。

Lines: 2 Columns: 10 Text: The quick brown fox jumped over the lazy dog.

T| he
~' quick
brown fox
jumped
over the
lazy dog.

Lines: 3 Columns: 10 Text: (Same as above)

T.| he
..| quick
~~' brown
fox jumped
over the
lazy dog.

Lines: 4 Columns: 10 Text: (Same as above)

T..| he
...| quick
...| brown
~~~' fox
jumped
over the
lazy dog.

Lines: 2 Columns: 80 Text: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor.

L| orem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus.
~' Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec
consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero
egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem
lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor.

Lines: 3 Columns: 80 Text: (Same as above)

L.| orem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus.
..| Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec
~~' consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget
libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta
lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non
tortor.

Lines: 4 Columns: 80 Text: (Same as above)

L..| orem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam
...| lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra
...| nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam
~~~' eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim,
ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies
a non tortor.

これはあり、標準的な抜け穴が適用されます。


3
イェーイ、もう一つのタイポグラフィの挑戦!これらがもっと必要です。
ETHproductions

2
単語が列幅よりも長い場合、つまりThe quick brown fox jumped over the unenthusiastic dog最初の3つの例の場合はどうなりますか
MickyT

@MickyTどの単語も列幅より長くなることはないと仮定します。つまり、column width > longest word + drop capital height
-intrepidcoder

大文字の行がテキストの行よりも大きい場合はどうなりますか?すなわち。L:4,C:100,T:'Stuff'
TFeld

また、できLines = 1ますか?
TFeld

回答:


1

Python 2、202バイト

def f(l,c,t):
 l-=1;s=['.'*l+'|']*l+['~'*l+"'"]
 s[0]=t[0]+s[0][1:];t=t[1:].split();j=0
 while t:
  w=t.pop(0)
  if len(s[j]+w)>=c:j+=1
  if j>=len(s):s.append(w)
  else:s[j]+=' '+w
 return '\n'.join(s)

として呼び出す f(Lines, Columns, Text)

f(4,100,'Stuff') 与える

S..| tuff
...|
...|
~~~'

1

C#、244バイト

string F(int d,int c,string t){var w=t.Substring(1).Split(' ');t=""+t[0];for(int i=0,x=c,y=0;i<w.Length;x+=w[i++].Length+1)t+=(1>(x=x+w[i].Length>c?0:x)?"\n"+(y++<d?(y<d?"| ":"' ").PadLeft(x=d+1,y<d?'.':'~'):""):" ")+w[i];return t.Remove(1,2);}

明確にするためのインデント、改行、コメント:

string F(int d,int c,string t){
    var w=t.Substring(1).Split(' ');
    t=""+t[0];
    for(int i=0,x=c,y=0;i<w.Length;x+=w[i++].Length+1)
        t+=(1>(x=x+w[i].Length>c?0:x)?"\n"+(y++<d?(y<d?"| ":"' ").PadLeft(x=d+1,y<d?'.':'~'):""):" ")+w[i];
    return t.Remove(1,2);
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.