Sformatuj kroplę kapitału


21

Wprowadzenie

Napisz program lub funkcję, która dodaje kroplę kapitału do akapitu. Program wprowadzi tekst do sformatowania, szerokość kolumny i liczbę wierszy upuszczenia kapitału. Wielkie litery wyglądają tak:

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

Jest to wyzwanie .

Wkład

  • Wprowadź ciąg znaków ASCII do wydruku (bez tabulatorów i znaków nowej linii) i 2 liczby całkowite większe niż jeden.
  • Jedna liczba całkowita to liczba kolumn, które powinny mieć dane wyjściowe.
  • Druga to liczba linii rozrzuconych przez kapitał upuszczający.
  • Ciąg tekstowy zawiera słowa oddzielone pojedynczymi spacjami.
  • Załóżmy, że żadne ze słów nie będzie dłuższe niż szerokość kolumny. To jest,column width > longest word + drop capital height
  • Wszystkie linie będą zawierały co najmniej jedno słowo.
  • W przypadku tego wyzwania słowo składa się z dowolnego znaku innego niż spacja.
  • Dane wejściowe mogą być w dowolnym dogodnym formacie zgodnie z powyższymi zasadami.

Wydajność

  • Wyrównany do lewej blok tekstu zawierający kapitał upuszczający z określoną liczbą wierszy.
  • Wiersz powinien zawierać jak najwięcej słów, ale nie powinien być dłuższy niż szerokość kolumny.
  • Między kapitałem zrzutu a resztą każdej linii jest spacja.
  • Dozwolona jest jedna spacja lub znak nowej linii.

Przykłady

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.

Jest to i obowiązują standardowe luki.


3
Tak, kolejne wyzwanie typograficzne ! Potrzebujemy ich więcej.
ETHprodukcje

2
Co dzieje się, gdy słowo jest dłuższe niż szerokość kolumny, tj. W The quick brown fox jumped over the unenthusiastic dogjednym z trzech pierwszych przykładów?
MickyT,

@MickyT Załóżmy, że żadne ze słów nie będzie dłuższe niż szerokość kolumny. To znaczycolumn width > longest word + drop capital height
intrepidcoder,

Co się stanie, jeśli linie kapitału są większe niż linia tekstu? To znaczy. L:4,C:100,T:'Stuff'
TFeld

Też może Lines = 1?
TFeld

Odpowiedzi:


1

Python 2, 202 bajty

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)

Zadzwoń jako f(Lines, Columns, Text)

f(4,100,'Stuff') daje

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

1

C #, 244 bajty

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

Wcięcie, nowe linie i komentarze dla jasności:

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);
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.