Formater un capital de dépôt

21

introduction

Écrivez un programme ou une fonction qui ajoute une majuscule à un paragraphe. Le programme entrera le texte à formater, la largeur des colonnes et le nombre de lignes pour supprimer la capitale. Les capitales se présentent comme suit:

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

Il s'agit d'un défi lié à la .

Contribution

  • Entrez une chaîne de caractères ASCII imprimables (pas de tabulations ni de nouvelles lignes) et 2 entiers supérieurs à un.
  • Un entier est le nombre de colonnes que la sortie doit avoir.
  • L'autre est le nombre de lignes couvertes par le capital de dépôt.
  • La chaîne de texte contient des mots séparés par des espaces simples.
  • Supposons qu'aucun des mots ne soit plus long que la largeur de la colonne. C'est,column width > longest word + drop capital height
  • Toutes les lignes auront au moins un mot.
  • Pour ce défi, un mot se compose de n'importe quel caractère autre qu'un espace.
  • L'entrée peut être dans n'importe quel format pratique en suivant les règles ci-dessus.

Production

  • Un bloc de texte justifié à gauche contenant une majuscule avec le nombre de lignes spécifié.
  • Une ligne doit contenir autant de mots que possible sans être plus longue que la largeur de colonne.
  • Il y a un espace entre les majuscules et le reste de chaque ligne.
  • Un espace de fin ou une nouvelle ligne est autorisé.

Exemples

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.

Il s'agit de et des échappatoires standard s'appliquent.

intrépide
la source
3
Ouais, un autre défi typographique ! Nous en avons besoin de plus.
ETHproductions
2
Que se passe-t-il lorsqu'un mot est plus long qu'une largeur de colonne, c'est- The quick brown fox jumped over the unenthusiastic dogà- dire pour l'un des trois premiers exemples?
MickyT
@MickyT Supposons qu'aucun des mots ne soit plus long que la largeur de colonne. Autrement dit,column width > longest word + drop capital height
intrepidcoder
Que faire si les lignes majuscules sont supérieures à la ligne de texte? C'est à dire. L:4,C:100,T:'Stuff'
TFeld
Et puis Lines = 1?
TFeld

Réponses:

1

Python 2, 202 octets

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)

Appelez en tant que f(Lines, Columns, Text)

f(4,100,'Stuff') donne

S..| tuff
...|
...|
~~~'
TFeld
la source
1

C #, 244 octets

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

Indentation, nouvelles lignes et commentaires pour plus de clarté:

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
la source