Allinea il testo a un blocco


10

Compito

Il tuo compito è scrivere l'intero programma, che allineerà l'input dato a un blocco di una determinata dimensione.

Ingresso:

40
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Produzione:

Lorem  ipsum dolor sit amet, consectetur
adipiscing  elit,  sed do eiusmod tempor
incididunt  ut  labore  et  dolore magna
aliqua.  Ut  enim  ad minim veniam, quis
nostrud   exercitation  ullamco  laboris
nisi ut aliquip ex ea commodo consequat.
Duis  aute  irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu
fugiat  nulla  pariatur.  Excepteur sint
occaecat cupidatat non proident, sunt in
culpa  qui  officia deserunt mollit anim
id est laborum.
                <-- note the linebreak

Dettagli di input

  • Devi scrivere l'intero programma eseguibile / interpretabile.
  • Si può supporre che l'input contenga solo caratteri ASCII stampabili e non contenga tab \t.
  • L'input può contenere interruzioni di riga. Se lo fa, si sono dati come \n, \ro \r\na seconda di ciò che ci si aspetta. Sono comunque uniti per l'intero input.
  • L'input può essere fornito in STDIN o come argomenti della riga di comando. Puoi usarli entrambi se si adattano alle tue esigenze (ad esempio, leggi la dimensione del blocco dal comando args e inserisci come stdin). Tuttavia, non è possibile codificare in modo rigido nessuna parte dell'input per il programma.
  • Si può supporre che la dimensione del blocco sia data come un > 0numero positivo ( ) valido .
  • L'interruzione di riga nell'input viene trattata allo stesso modo di uno spazio (essendo quindi un separatore di parole)
  • Se l'input contiene più spazi simultanei, vengono considerati come uno solo.

Dettagli di output

  • L'output deve essere formattato in un blocco di dimensioni determinate. La formattazione viene eseguita aggiungendo spazi tra le parole.
  • Il numero di spazi tra le parole su una linea deve essere uguale per quella linea. Se ciò non è possibile, è necessario aggiungere spazi uno dopo l'altro dopo le parole a partire da sinistra.
  • Se la parola è più lunga di quella data dimensione del blocco, rimarrà sola su una sola riga (e supererà la dimensione del blocco).
  • Se l'output deve contenere solo una parola, verrà allineato a sinistra.
  • L'ultima riga dell'output deve essere allineata a sinistra, con solo uno spazio tra le parole. L'ultima riga dell'output deve terminare con un'interruzione di riga finale.

La risposta, con il minor numero di byte dopo qualche tempo, vince.
Se hai bisogno di ulteriori informazioni, lascia un commento.

Casi test

Input:
10
Lorem ipsum dolor sit amet,
consectetur adipiscing elit, sed do eiusmod tempor

Output:
Lorem
ipsum
dolor  sit
amet,
consectetur
adipiscing
elit,  sed
do eiusmod
tempor

Input:
20
Lorem     ipsum

dolor  sit amet,

Output:
Lorem   ipsum  dolor
sit amet,

Input:
1
Lorem ipsum dolor sit amet

Output:
Lorem
ipsum
dolor
sit
amet

Relazionato. (Finalmente una seconda sfida per il mio tag tipografico che è già stato eliminato automaticamente.;))
Martin Ender,

@ MartinBüttner Non sapevo che esistesse tale tag.
Zereges,

@ Vɪʜᴀɴ Devi scrivere l'intero programma eseguibile / interpretabile.
Dennis,


@ppperry Interessante, per qualche motivo, ha evitato le mie capacità di ricerca
Zereges,

Risposte:


2

Pyth, 60 57 54 51 50 52 byte

22-10-2015: la correzione di un bug ha richiesto 2 byte.

=HfTcjd.zdWHAcH]f|qTlH>jd<HhTQ1s.iGcJ|tlG1*d?H-QlsGJ

Provalo online.


1

Rubino, 179 caratteri

n=gets.to_i
s=t=''
$<.read.split.map{|w|if(t+w).size>=n
0while t.size<n&&(1..n).any?{|i|t.sub!(/[^ ]#{' '*i}(?=[^ ])/){|x|x+' '}}
s+=t+?\n
t=w
else
t+=' '+w
t.strip!
end}
puts s,t

Troppo a lungo ...

Versione semigolfata:

n = gets.to_i
s = t = ''
$<.read.split.map{|w|
    if (t + w).size >= n
        0 while t.size < n && (1..n).any?{|i|t.sub!(/[^ ]#{' '*i}(?=[^ ])/){|x|x+' '}}
        s += t + ?\n
        t = w
    else
        t += ' ' + w
        t.strip!  # this is only necessary because of the very first word >:(
    end
}
puts s,t

0

CJam, 87 byte

l~:LS*qNSerS%{(2$1$a+_S*,L>{;a\}{\;@;\}?}h;S*a]1>{I1>{LIs,-I,(md1b\aI,(*.+Sf*I.\}I?N}fI

Questo dovrebbe essere ancora golfabile. Provalo online nell'interprete CJam .


0

Retina , 133 byte

\s+

+`((1)*1 )((?<-2>.)*\S|\S+) 
:$3<LF>$1
m+`^(?=.(.)+$[^<TB>]*^(?>(?<-1>1)+)1)((.*):(\S+ +)|(\S+ +)(.*):)
$3$4$5 :$6
+`:|<LF>1+| (?= .*$)
<empty>

Il <empty>rappresenta una riga finale vuota. Per eseguire il codice, inserire ogni riga in un file separato, sostituirla <LF>con caratteri di avanzamento riga (0x0A) e <TB>con una scheda (0x09). Aggiungerò una spiegazione quando avrò finito di giocare a golf.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.