Відформатуйте капітал випадання


21

Вступ

Напишіть програму або функцію, яка додає до абзацу кращий капітал. Програма буде вводити текст у форматі, ширині стовпця та кількості рядків для виведення великої літери. Капітальні столики виглядають приблизно так:

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

Це виклик, пов'язаний з .

Вхідні дані

  • Введіть рядок символів для друку ASCII (без вкладок чи нових рядків) та 2 цілих чисел, більших за одне.
  • Одне ціле число - це кількість стовпців, які повинен мати вихід.
  • Інша - кількість ліній, що охоплюються капіталом.
  • Текстовий рядок містить слова, розділені єдиними пробілами.
  • Припустимо, що жодне слово не буде довше ширини стовпця. Це є,column width > longest word + drop capital height
  • Усі рядки матимуть хоча б одне слово.
  • Для цього завдання слово складається з будь-якого символу, окрім пробілу.
  • Введення даних може бути у будь-якому зручному форматі, дотримуючись наведених вище правил.

Вихідні дані

  • Блок тексту, виправданий ліворуч, містить велику літеру з вказаною кількістю рядків.
  • Рядок повинен містити якомога більше слів, не довший ширини стовпця.
  • Між початковим капіталом та рештою кожного рядка є пробіл.
  • Доступний один пробіл або новий рядок.

Приклади

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для будь-якого з перших трьох прикладів?
MickyT

@MickyT Припустимо, що жодне слово не буде довше ширини стовпця. Тобто,column width > longest word + drop capital height
intrepidcoder

Що робити, якщо літери великої літери більше, ніж рядки тексту? Тобто L:4,C:100,T:'Stuff'
TFeld

Також, може Lines = 1?
TFeld

Відповіді:


1

Пітон 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);
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.