Formatar uma queda de capital


21

Introdução

Escreva um programa ou função que adicione uma capital maiúscula a um parágrafo. O programa inserirá o texto para formatar, a largura da coluna e o número de linhas para eliminar a capital. As maiúsculas são assim:

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

Este é um desafio relacionado à .

Entrada

  • Insira uma sequência de caracteres ASCII imprimíveis (sem guias ou novas linhas) e 2 números inteiros maiores que um.
  • Um número inteiro é o número de colunas que a saída deve ter.
  • A outra é o número de linhas estendidas pela capital maiúscula.
  • A sequência de texto contém palavras separadas por espaços únicos.
  • Suponha que nenhuma das palavras seja maior que a largura da coluna. Isso é,column width > longest word + drop capital height
  • Todas as linhas terão pelo menos uma palavra.
  • Para esse desafio, uma palavra consiste em qualquer caractere que não seja um espaço.
  • A entrada pode estar em qualquer formato conveniente, seguindo as regras acima.

Saída

  • Um bloco de texto justificado à esquerda que contém uma capital maiúscula com o número especificado de linhas.
  • Uma linha deve conter o maior número possível de palavras sem exceder a largura da coluna.
  • Há um espaço entre o capital inicial e o restante de cada linha.
  • Um espaço à direita ou nova linha é permitido.

Exemplos

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 é o e as brechas padrão se aplicam.


3
Yay, outro desafio de tipografia ! Nós precisamos mais destas.
ETHproductions

2
O que acontece quando uma palavra ultrapassa a largura da coluna, ou seja, The quick brown fox jumped over the unenthusiastic dogpara qualquer um dos três primeiros exemplos?
MickyT 04/11

@MickyT Suponha que nenhuma das palavras terá mais que a largura da coluna. Ou seja,column width > longest word + drop capital height
intrepidcoder

E se as linhas de capital forem maiores que a linha de texto? Ou seja. L:4,C:100,T:'Stuff'
TFeld

Além disso, pode Lines = 1?
TFeld 5/11

Respostas:


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)

Ligar como f(Lines, Columns, Text)

f(4,100,'Stuff')

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

Recuo, novas linhas e comentários para maior clareza:

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);
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.