Formatieren Sie ein Drop-Capital

21

Einführung

Schreiben Sie ein Programm oder eine Funktion, die einem Absatz ein Großbuchstaben hinzufügt. Das Programm gibt den zu formatierenden Text, die Spaltenbreite und die Anzahl der Zeilen zum Löschen des Großbuchstaben ein. Die Großbuchstaben sehen folgendermaßen aus:

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

Dies ist eine Herausforderung.

Eingang

  • Geben Sie eine Zeichenfolge aus druckbaren ASCII-Zeichen (keine Tabulatoren oder Zeilenumbrüche) und zwei Ganzzahlen ein, die größer als eins sind.
  • Eine Ganzzahl ist die Anzahl der Spalten, die die Ausgabe haben soll.
  • Die andere ist die Anzahl der Zeilen, die vom Drop-Capital überspannt werden.
  • Die Textzeichenfolge enthält Wörter, die durch einzelne Leerzeichen getrennt sind.
  • Angenommen, keines der Wörter ist länger als die Spaltenbreite. Das ist,column width > longest word + drop capital height
  • Alle Zeilen enthalten mindestens ein Wort.
  • Für diese Herausforderung besteht ein Wort aus einem anderen Zeichen als einem Leerzeichen.
  • Die Eingabe kann in einem beliebigen Format erfolgen, das den obigen Regeln entspricht.

Ausgabe

  • Ein linksbündiger Textblock, der ein Großbuchstaben mit der angegebenen Anzahl von Zeilen enthält.
  • Eine Zeile sollte so viele Wörter wie möglich enthalten, ohne länger als die Spaltenbreite zu sein.
  • Zwischen dem Drop-Capital und dem Rest jeder Zeile befindet sich ein Leerzeichen.
  • Ein abschließendes Leerzeichen oder eine neue Zeile ist zulässig.

Beispiele

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.

Dies ist und es gelten Standard-Regelungslücken.

unerschrockener Kodierer
quelle
3
Ja, eine weitere Typografie- Herausforderung! Wir brauchen mehr davon.
ETHproductions
2
Was passiert, wenn ein Wort länger als eine Spaltenbreite ist, also The quick brown fox jumped over the unenthusiastic dogfür eines der ersten drei Beispiele?
MickyT
@MickyT Angenommen, keines der Wörter ist länger als die Spaltenbreite. Das heißt,column width > longest word + drop capital height
intrepidcoder
Was ist, wenn die Großbuchstaben größer sind als die Textzeile? Dh L:4,C:100,T:'Stuff'
TFeld
Auch kann Lines = 1?
TFeld,

Antworten:

1

Python 2, 202 Bytes

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)

Anrufen als f(Lines, Columns, Text)

f(4,100,'Stuff') gibt

S..| tuff
...|
...|
~~~'
TFeld
quelle
1

244 Bytes

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

Einrückung, neue Zeilen und Kommentare zur Verdeutlichung:

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);
}
Hand-E-Food
quelle