Formatear un capital de caída


21

Introducción

Escriba un programa o función que agregue una caída de capital a un párrafo. El programa ingresará el texto a formatear, el ancho de la columna y el número de líneas para colocar la capital. Las letras mayúsculas se ven así:

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

Este es un desafío relacionado con la .

Entrada

  • Ingrese una cadena de caracteres ASCII imprimibles (sin pestañas o líneas nuevas) y 2 enteros mayores que uno.
  • Un número entero es el número de columnas que debe tener la salida.
  • El otro es el número de líneas abarcadas por la caída de capital.
  • La cadena de texto contiene palabras separadas por espacios individuales.
  • Suponga que ninguna de las palabras será más larga que el ancho de la columna. Es decir,column width > longest word + drop capital height
  • Todas las líneas tendrán al menos una palabra.
  • Para este desafío, una palabra consta de cualquier carácter que no sea un espacio.
  • La entrada puede estar en cualquier formato conveniente siguiendo las reglas anteriores.

Salida

  • Un bloque de texto justificado a la izquierda que contiene una mayúscula con el número especificado de líneas.
  • Una línea debe contener tantas palabras como sea posible sin ser más larga que el ancho de la columna.
  • Hay un espacio entre el capital desplegable y el resto de cada línea.
  • Se permite un espacio final o nueva línea.

Ejemplos

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.

Este es el y se aplican las lagunas estándar.


3
¡Yay, otro desafío de tipografía ! Necesitamos más de estos.
ETHproductions

2
¿Qué sucede cuando una palabra es más larga que el ancho de una columna, es decir, The quick brown fox jumped over the unenthusiastic dogpara cualquiera de los primeros tres ejemplos?
MickyT

@MickyT Suponga que ninguna de las palabras será más larga que el ancho de la columna. Es decir,column width > longest word + drop capital height
intrepidcoder

¿Qué pasa si las líneas mayúsculas son mayores que la línea de texto? Es decir. L:4,C:100,T:'Stuff'
TFeld

Además, Lines = 1¿ puede ?
TFeld

Respuestas:


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)

Llamar como f(Lines, Columns, Text)

f(4,100,'Stuff') da

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

1

C #, 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);}

Sangría, nuevas líneas y comentarios para mayor claridad:

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);
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.