Sejajarkan teks dengan blok

10

Tugas

Tugas Anda adalah menulis seluruh program, yang akan menyelaraskan input yang diberikan ke blok ukuran yang diberikan.

Memasukkan:

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.

Keluaran:

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

Detail Input

  • Anda harus menulis seluruh program yang dapat dieksekusi / dapat ditafsirkan.
  • Anda mungkin mengira, bahwa input hanya berisi karakter ASCII yang dapat dicetak dan tidak mengandung tab \t.
  • Input dapat berisi jeda baris. Jika ia melakukannya, mereka diberikan sebagai \n, \ratau \r\ntergantung pada apa yang Anda harapkan. Namun mereka disatukan dalam seluruh input.
  • Input dapat diberikan dalam STDIN, atau sebagai argumen baris perintah. Anda dapat menggunakan keduanya jika sesuai dengan kebutuhan Anda (misalnya, baca ukuran blok dari command args dan input sebagai stdin). Namun, Anda tidak boleh menyalin kode bagian apa pun dari input ke program Anda.
  • Anda mungkin mengira bahwa ukuran blok diberikan sebagai > 0angka positif ( ) yang valid .
  • Istirahat baris pada input diperlakukan dengan cara yang sama dengan spasi (dengan demikian menjadi pemisah kata)
  • Jika input berisi beberapa ruang konkuren, mereka diperlakukan sebagai satu.

Rincian keluaran

  • Keluaran harus diformat ke dalam blok ukuran yang diberikan. Pemformatan dilakukan dengan menambahkan spasi antar kata.
  • Jumlah spasi antara kata-kata pada suatu baris harus sama dengan baris itu. Jika tidak memungkinkan, ruang tambahan harus ditambahkan satu per satu setelah kata-kata dimulai dari kiri.
  • Jika kata lebih panjang dari ukuran blok yang diberikan, itu akan berdiri sendiri pada satu baris (dan akan melebihi ukuran blok).
  • Jika output hanya berisi satu kata, itu akan disejajarkan ke kiri.
  • Baris terakhir dari output harus disejajarkan ke kiri, dengan hanya satu spasi di antara kata-kata. Baris terakhir dari output harus diakhiri dengan trailing line break.

Jawabannya, dengan jumlah byte terpendek setelah beberapa waktu, menang.
Jika Anda memerlukan informasi tambahan, tinggalkan komentar.

Uji kasus

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
Zereges
sumber
Terkait (Akhirnya tantangan kedua untuk tag tipografi saya yang sudah dihapus secara otomatis.;))
Martin Ender
@ MartinBüttner Saya tidak tahu bahwa tag seperti itu ada.
Zereges
@ Vɪʜᴀɴ Anda harus menulis seluruh program yang dapat dieksekusi / dapat ditafsirkan.
Dennis
@ppperry Menarik, untuk beberapa alasan, itu menghindari keterampilan pencarian saya
Zereges

Jawaban:

2

Pyth, 60 57 54 51 50 52 byte

2015-10-22: memperbaiki bug membutuhkan 2 byte.

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

Cobalah online.

PurkkaKoodari
sumber
1

Ruby, 179 karakter

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

Terlalu lama...

Versi semi-ungolfed:

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
Gagang pintu
sumber
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

Ini harus tetap golf. Cobalah online di penerjemah CJam .

Dennis
sumber
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>

The <empty>mewakili garis miring kosong. Untuk menjalankan kode, letakkan setiap baris dalam file terpisah, ganti <LF>dengan karakter linefeed (0x0A) dan <TB>dengan tab (0x09). Saya akan menambahkan penjelasan ketika saya selesai bermain golf.

Martin Ender
sumber