Pusatkan Teks!

40

Pusatkan Teks!

Dalam tantangan ini, Anda akan memusatkan berbagai jalur.

Contohnya

Foo
barbaz

 Foo
barbaz
Hello
World

Hello
World
Programming Puzzles
&
Code Golf

Programming Puzzles
         &
     Code Golf

Spesifikasi

Setiap baris input akan selalu memiliki setidaknya satu karakter non-spasi, Anda dapat mengasumsikan satu-satunya karakter spasi adalah spasi ( ) dan baris baru. Setiap jalur input tidak akan memiliki spasi tambahan dan / atau spasi putih terkemuka (kecuali untuk baris baru). Trailing whitespace dalam output tidak diperbolehkan.

Anda harus memusatkan di antara garis terpanjang di input. Jika panjangnya bahkan panjang, program / fungsi Anda harus memilih untuk memusat ke kiri. Panjang garis maksimum adalah apa pun yang bisa ditangani oleh bahasa Anda, tetapi program Anda harus berfungsi pada garis dengan panjang minimal 500.


Papan peringkat

Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.

Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:

# Language Name, N bytes

di mana Nukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda bisa menyimpan skor lama di headline, dengan mencoretnya. Contohnya:

# Ruby, <s>104</s> <s>101</s> 96 bytes

Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:

# Perl, 43 + 2 (-p flag) = 45 bytes

Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes


Ini adalah sehingga kode terpendek dalam byte menang!

Downgoat
sumber
Tidak akan pernah ada lebih dari satu ruang batin?
kucing
@cat tidak akan pernah ada spasi kosong terdepan atau spasi spasi tambahan di baris (perkirakan baris baru jika ada)
Downgoat
ya, tapi maksud saya ruang dalam , seperti, di antara kata
cat
1
@cat oh, antara kata mungkin ada lebih dari satu spasi putih. Misalnya foo(space)(space)(space)baradalah input yang bisa diterima
Downgoat
dapatkah kita berasumsi akan selalu ada lebih dari 1 baris?
GamrCorps

Jawaban:

15

Pyth, 19 17 byte

2 byte berkat Jakube

V.ztr+1.[l.T.zNd6

Demonstrasi

Saya pikir ini adalah pertama kalinya fungsi center-pad .[bermanfaat. Panjang garis terpanjang ditemukan menggunakan transpos non-truncating ( .T).

Spasi tertinggal dihapus dengan menambahkan karakter non spasi ke depan, stripping spasi, kemudian menghapus karakter yang ditambahkan.

isaacg
sumber
1
Kita mungkin membutuhkan panjang maksimal dalam array. Itu muncul terlalu sering. +1
Maltysen
Spesifikasi mengatakan bahwa "Trailing whitespace dalam output tidak diperbolehkan." Tampaknya memiliki spasi spasi di setiap baris pendek di output, jadi saya tidak yakin itu diperhitungkan.
kentang
@potato Terima kasih - itu ditambahkan sejak saya menjawab.
isaacg
31

vim, 43 36 35 byte

VGrx:sor
G:let &tw=col("$")
uu:%ce

Terlalu bagus untuk tidak diposkan. Perhatikan baris baru yang tertinggal; ini penting.

Terima kasih kepada @Marth karena telah menyimpan karakter!

format ramah vim:

VGrx:sor<cr>G:let &tw=col("$")<cr>uu:%ce<cr>

Penjelasan:

VGrx                   replace every character with an "x"
:sor<cr>               sort (since all chars are now same, sorts by line length)
G                      go to the very last line
:let &tw=col("$")<cr>  set &tw to column number of last char on this line
                         "let &tw" is equivalent to "set tw"
                         tw is short for textwidth, used in :center
uu                     undo the sort, and the replacing-with-x too
:%ce<cr>               center over entire file (%), using textwidth set earlier
Gagang pintu
sumber
1
Tentunya ini semua harus dilakukan dalam mode Sisipkan, kan?
Alex A.
9
@AlexA. Tidak ada yang dilakukan dalam mode insert. ಠ_ಠ
Doorknob
Jika Anda menggunakan sor!untuk membalik urutan, Anda dapat menggunakan col("$")untuk mendapatkan panjang dari baris pertama (sekarang terpanjang sejak urutan dibalik) alih-alih menggunakan G$, menghemat total 1 byte! sunting : atau Anda dapat menyimpan pesanan pengurutan dan menggunakannya G:let &tw=col("$")sebagai gantinya.
Marth
@Arth, terima kasih! Saya memilih yang terakhir (tanpa alasan tertentu).
Gagang Pintu
Melihat melalui :h :sortSaya baru saja menemukan bahwa Anda dapat melewati regex untuk melewati teks yang cocok dalam pengurutan, sehingga Anda dapat menggunakan :sor /./untuk mengurutkan panjang (+4 byte), yang memungkinkan Anda menghapus VGrx(-4 byte) dan yang kedua membatalkan ( -1 byte). Anda juga dapat menggunakan |pemisah alih-alih mem- <cr>rantai perintah, yang memungkinkan Anda melewati :sebelumnya let(-1 byte) (perhatikan bahwa Anda harus menggunakan sor!solusi saat itu, Gbukan merupakan perintah ex). Jadi :sor! /./|let &tw=col("$")|u|%ce (dengan trailing <CR>) harus menyimpan 2 byte.
Marth
23

Mathematica, 96 byte

StringRiffle[#~StringPadLeft~Floor[Max@(l=StringLength)@a/2+l@#/2]&/@(a=#~StringSplit~"
"),"
"]&

Jangan tanya saya bagaimana cara kerjanya, saya hanya mengotak-atiknya sampai menghasilkan output yang benar.

LegionMammal978
sumber
27
+1 untuk "Jangan tanya saya bagaimana cara kerjanya, saya hanya mengotak-atiknya sampai menghasilkan output yang benar"
cat
4
@ kucing Itulah cara saya melakukan semua golf saya.
lirtosiast
11

Funciton , tidak kompetitif

Tantangan ini menyoroti kurangnya fungsi "nilai maksimum" (dan nilai minimum) untuk urutan malas, jadi ... Saya menambahkannya ke perpustakaan inti (masing-masing disebut ⊤ dan ⊥). Oleh karena itu saya tidak repot-repot untuk mengirimkan ini sebagai golfed jawaban (itu akan harus menyertakan ⊤ deklarasi fungsi menjadi valid), jadi di sini hanya program utama.

Jalankan (function(){$('pre,code').css({lineHeight:5/4,fontFamily:'DejaVu Sans Mono'});})()di konsol browser Anda untuk mendapatkan rendering yang lebih bagus.

   ╓───╖         ╔════╗  ┌───╖  ╔═══╗
 ┌─╢ ‡ ╟─┐       ║ 10 ╟──┤ ǁ ╟──╢   ║
 │ ╙───╜ │       ╚════╝  ╘═╤═╝  ╚═══╝
 │ ┌───╖ │  ┌──────────────┴──────────────────┐
 └─┤ ‼ ╟─┘┌─┴─╖ ┌───╖ ┌───╖ ┌───╖ ┌───╖       │     │
   ╘═╤═╝  │ ɱ ╟─┤ ⊤ ╟─┤ + ╟─┤ ~ ╟─┤ ℓ ╟───┐ ┌─┴─╖ ┌─┴─╖ ╔════╗
     │    ╘═╤═╝ ╘═══╝ ╘═╤═╝ ╘═══╝ ╘═══╝   │ │ ɱ ╟─┤ ʝ ╟─╢ 10 ║
    ┌───╖ ╔═╧═╕ ╔═══╗ ┌─┴──╖ ┌───╖ ╔════╗ │ ╘═╤═╝ ╘═══╝ ╚════╝
  ┌─┤ ℓ ╟─╢   ├─╢ 1 ║ │ >> ╟─┤ … ╟─╢ 32 ║ │   │
  │ ╘═══╝ ╚═╤═╛ ╚═╤═╝ ╘═╤══╝ ╘═╤═╝ ╚════╝ │ ╔═╧═╕ ╔═══╗
  └─────────┘     └─────┘      │   ┌───╖  ├─╢   ├─╢ 0 ║
                               └───┤ ‡ ╟──┘ ╚═╤═╛ ╚═══╝
                                   ╘═╤═╝      │
                                     └────────┘

Penjelasan

Saya percaya ini mungkin jawaban Funciton pertama di situs ini yang menggunakan ekspresi lambda.

  • Pertama, kita gunakan ǁuntuk membagi string input pada baris baru (ASCII 10). Ini mengembalikan urutan malas.
  • Kami melewati urutan itu melalui ɱ(peta), memberikannya lambda yang menghitung panjang setiap string, dan kemudian melewati urutan terakhir untuk mendapatkan panjang garis terpanjang.
  • Kami juga melewati urutan itu melalui yang lain ɱ, memberikannya lambda yang menghitung panjang setiap string, mengurangi dari panjang garis maksimum yang dihitung sebelumnya, membaginya dengan 2 (sebenarnya bergeser ke kanan 1), menghasilkan banyak ruang (ASCII 32) dan kemudian menyatukan string ke ruang-ruang itu. (Untuk alasan geometris, saya mendeklarasikan fungsi yang memanggil (string concatenate) dengan parameter yang dibalik.)
  • Akhirnya, kita gunakan ʝuntuk menyatukan semua string, menggunakan baris baru (ASCII 10) sebagai pemisah.
Timwi
sumber
Beri +1 untuk betapa mengagumkannya ini dan "Itu 716 karakter, total 1.508 byte"
cat
9

Retina , 54 52 byte

+m`^(.)+$(?<=(?=[^\t]*^..(?<-1>.)+(?(1)^))[^\t]*)
 $0 

The \ts dapat diganti dengan tab yang sebenarnya, tapi aku telah menggunakan \tdi sini, karena jika tidak SE akan mengkonversi tab ke spasi. Perhatikan bahwa ada spasi di baris kedua.

Cobalah online.

Penjelasan

Ide dasarnya adalah untuk mencocokkan garis yang setidaknya dua karakter lebih pendek dari garis terpanjang (atau teknis, dua karakter lebih pendek dari setiap jalur lain), dan mengelilingi dalam dua ruang. Ini diulangi sampai kita tidak dapat lagi menemukan garis seperti itu, yang berarti bahwa semua garis berada dalam satu karakter dengan panjang maksimum (di mana satu karakter tersebut untuk menjelaskan ketidakcocokan paritas, dan menjamin bahwa garis-garis ini digeser ke kiri). pusat).

Adapun regex yang sebenarnya:

^(.)+$

Hanya cocok dengan satu baris sembari mendorong satu tangkapan ke grup 1untuk setiap karakter.

(?<=...[^\t]*)

Adalah tampilan di belakang yang cocok dari kanan ke kiri dan memindahkan kursor ke awal string, sehingga lookahead di dalam dapat memeriksa seluruh string. Perhatikan bahwa karena kurangnya jangkar, lookahead dapat diterapkan dari tempat lain, tetapi itu tidak membuat kecocokan tambahan. Kita tahu bahwa [^\t]akan selalu cocok dengan karakter apa pun dalam string, karena input dijamin hanya berisi spasi dan baris baris sejauh menyangkut spasi.

(?=[^\t]*^..(?<-1>.)+(?(1)^))

Kepala pencarian ini mencoba menemukan garis yang setidaknya dua karakter lebih panjang dari yang saat ini kami cocokkan. [^\t]*bergerak melalui string agar dapat mencocokkan garis apa pun. ^memastikan bahwa kami mulai dari awal baris. ..kemudian cocok dengan dua karakter tambahan yang kami butuhkan untuk garis yang lebih panjang. Sekarang (?<-1>.)+cocok dengan karakter individu di baris itu saat keluar dari grup 1(catatan yang .tidak dapat cocok dengan umpan baris, jadi ini dibatasi ke satu baris). Akhirnya, (?(1)^)menegaskan bahwa kami berhasil mengosongkan seluruh grup 1. Jika garis lebih pendek dari yang diperlukan, ini tidak mungkin, karena tidak ada cukup karakter di baris untuk muncul dari grup 1 cukup sering untuk mengosongkannya.

Martin Ender
sumber
7

Jolf , 3 byte

Tidak bersaing, perbarui pertanyaan tanggal kiriman.

Coba di sini! .

pci
pc  center
  i  string input

¯ \ _ (ツ) _ / ¯ Saya pikir itu akan menjadi fungsi yang berguna.

Conor O'Brien
sumber
1
Ini adalah celah standar, dan walaupun tidak secara eksplisit di-non-aktifkan, ini merupakan bentuk yang buruk kecuali dibangun ke dalam bahasa yang Anda temukan, bukan yang Anda buat.
Elias Benevedes
3
@EliasBenevedes Saya menambahkan fitur sebelum kontes. Saya tidak sering memperbarui kode saya sampai menjadi relavent.
Conor O'Brien
7

JavaScript (ES6), 93 91 byte

s=>(m=l=s.split`
`).map(x=>(v=x.length/2)<m?v:m=v).map((x,i)=>" ".repeat(m-x)+l[i]).join`
`

2 byte disimpan berkat @ edc65 !

Penjelasan

s=>(
  m=                // m = max line length (divided by 2)
    l=s.split`
`)                  // l = array of lines
.map(x=>            // for each line
  (v=x.length/2)    // v = current line length / 2
    <m?v:m=v        // set m to the max line length and return v
)
.map((x,i)=>        // for each line length / 2
  " ".repeat(m-x)   // add spaces before
    +l[i]           // add line text
)
.join`
`                   // return lines as a newline-separated string

Uji

pengguna81655
sumber
.repeatmenerima dan memotong nilai-nilai non-integer, jadi Anda tidak perlu|0
edc65
7

CJam, 26 23 19 byte

qN/_z,f{1$,m2/S*\N}

Pertama kali saya menggunakan CJam! Empat byte disimpan berkat Martin Büttner. Cobalah online.

Penjelasan

qN/    e# Read input and split each line
_z,    e# Transpose a copy and get its length to find the longest line
f{     e# For each line...
  1$,- e# Subtract its length from the longest length
  2/   e# Divide by two to get just the spaces to add to the left
  S*\  e# Add a string with that many spaces to the beginning
  N    e# Add a newline to go on to the next line
}
NinjaBearMonkey
sumber
1
Berikut adalah beberapa saran :)qN/_z,f{1$,m2/S*\N}
Martin Ender
6

LabVIEW, 3 atau 35 Primview LabVIEW

Temukan baris sampai tidak ada yang tersisa, lalu hitung berapa banyak ruang untuk ditambahkan dan satukan semuanya.

Atau Anda bisa menggunakan pelurusan tengah bawaan pada indikator senar, rasanya agak curang.

Eumel
sumber
6

Python 2, 83 81 byte

def f(s):
 t=s.split('\n')
 for y in t:print(max(len(f)for f in t)-len(y))/2*' '+y  

Terima kasih kepada @xnor karena telah menyimpan 2 karakter

contoh input:

f("""Programming Puzzles
&
Code Golf""")

contoh output:

Programming Puzzles
         &
     Code Golf

Dan berakhir di tempat kedua dengan 84 byte menggunakan str.center () dan str.rstrip (terima kasih @JF).

def f(s):
 t=s.split('\n')
 for y in t:print y.center(max(len(f)for f in t)).rstrip()
Willem
sumber
Itu tidak menyimpan karakter untuk menetapkan lenke variabel yang Anda gunakan dua kali - yang impas pada 5 karakter (seperti range). Anda juga dapat menggunakan mapdaftar comp.
xnor
@ Willem, Anda dapat menggunakan str.rstrip()setelah menelepon centeruntuk menyingkirkan ruang trailing.
JF
Anda dapat menyimpan 7 byte dengan program penuh dan menggunakan len(max(a,key=len)), lihat ini .
ბიმო
5

TeaScript , 24 byte

£p.R((aßln)¯-ln)/2)+l,§)

Loop melalui garis, menambahkan floor((max line length - line length) / 2) spasi ke awal.

Tidak disatukan

£   p.R((aß  ln)¯  -ln)/2)+l,§   )
xl(#p.R((am(#ln)X()-ln)/2)+l,`\n`)

xl(#    // Loops through newlines
    p.R(   // Repeats spaces
      (
       am(#ln)    // Map all line lengths
              X() // Get largest line length
       -ln)       // Subtract current line length
      /2)  // Divide by two
      +l,  // Add current line text
`\n`)

Cobalah online

Downgoat
sumber
5
Mengapa jawaban saya terus dihinggapi? Saya pikir sudah waktunya untuk mengubah nama pengguna / avatar: p
Downgoat
Diperbaiki pada 2016-07-27. : P
user48538
5

PowerShell, 58 67 byte

turun ke 58 byte berkat komentar @ mazzy:

param($a)$a|%{$_|% *ft(($a|% le*|sort)[-1]/2+$_.length/2)}


# It takes an array of strings as input
PS C:\Temp> .\center.ps1 'aaa','bb','c'
aaa
bb
 c


# Or here, read from a file
PS C:\Temp> .\center.ps1 (gc t.txt)
info0:info1:info2:info3
      info0:info1
          ttt
          tt
           t
  • Dibutuhkan array string sebagai $a, loop atas setiap string|%{...} .
  • memanggil string.padleft()metode pada setiap string, melalui% -member pintasan, yang mengambil panjang garis akhir yang diinginkan sebagai parameter.
    • kita butuh array_longest_line_length/2 + current_line_length/2
    • bagian akhirnya adalah current_line_length/2->$_.length/2
    • bagian lainnya menghitung ulang panjang garis maksimum array setiap kali melalui loop, dan ia melakukannya dengan loop bersarang membuat array panjang garis, mengurutkannya, lalu mengambil yang terakhir.
TessellatingHeckler
sumber
Anda dapat menggunakan Nama Properti Shortening dan Panjang elemen untuk mendapatkan 58 byte
mazzy
1
@ Mazzy itu lebih baik! karena Anda tidak memposting sebagai jawaban, saya telah mengeditnya menjadi jawaban saya dengan pujian.
TessellatingHeckler
3

Emacs Lisp, 203 byte

(let((f 0)(l 0))(dolist(s(split-string(buffer-string)"\n"))(set'l(string-width s))(when(> l f)(set'f l)))(let((fill-column f))(goto-char(point-min))(while(<(point)(point-max))(center-line)(next-line)))))

Tidak Disatukan:

(let ((f 0) (l 0))
  (dolist (s (split-string(buffer-string) "\n"))
    (set 'l (string-width s))
    (when (> l f)
      (set 'f l)))
    (let ((fill-column f))
      (goto-char (point-min))
      (while (< (point) (point-max))
        (center-line)
        (next-line)))))

Berpusat:

               (let ((f 0) (l 0))
 (dolist (s (split-string(buffer-string) "\n"))
           (set 'l (string-width s))
                 (when (> l f)
                  (set 'f l)))
             (let ((fill-column f))
            (goto-char (point-min))
         (while (< (point) (point-max))
                 (center-line)
                (next-line)))))
Tuan Yuuma
sumber
3

HTML, 40 byte

<xmp style=float:left;text-align:center>

Cuplikan menyertakan </xmp>tag karena penampil cuplikan kode ingin agar tag saya seimbang.

Neil
sumber
2

MATL , 22 31 byte

`jtYz~]xXhc4X4H$ZuZ{Zv

Setiap baris adalah input dengan garis trailing (yaitu, enterkeystroke). Baris kosong (dua enterpenekanan tombol) menandai akhir input.

Contoh

>> matl `jtYz~]xXhc4X4H$ZuZ{Zv
> foo
> barbaz
> 
 foo
barbaz

Penjelasan

`          % do...
  j        % input one string
  tYz~     % is it not empty?
]          % ...while
x          % delete last input (empty string)
Xh         % concatenate all inputs into a cell array
c          % convert to char (2D array). This fills with spaces to the right
4X4H$Zu    % center justify
Z{         % convert to cell array of strings
Zv         % remove trailing blanks of each string
Luis Mendo
sumber
2

Ruby, 76 68 61 byte

->t{(s=t.split$/).map{|l|l.center(s.map(&:size).max).rstrip}}

Contoh dijalankan:

2.1.5 :001 > puts ->t{(s=t.split$/).map{|l|l.center(s.map(&:size).max).rstrip}}["Programming Puzzles\n&\nCode Golf"]
Programming Puzzles
         &
     Code Golf
manatwork
sumber
53 byte:->t{(s=t.split$/).map{|l|l.center s.map(&:size).max}}
daniero
Saya juga mencoba centercara pertama, tetapi seperti yang saya mengerti, itu saja yang akan melanggar aturan "Trailing whitespace dalam output tidak diperbolehkan". Terima kasih untuk &:sizebagiannya - Saya juga mencobanya juga, tapi saya pasti membenturkan sesuatu di sekitar sintaks.
manatwork
2

Haskell, 111 81 77 byte

l=length
f s|q<-lines s=unlines[([1..div(maximum(l<$>q)-l w)2]>>" ")++w|w<-q]

Input ke fungsi f, output tidak dicetak.

Penggunaan: muat dalam juru bahasa ghci center.hsdan kemudian jika Anda ingin mencetak output f pada string yang diberikanputStr$f"Programming Puzzles\n&\nCode Golf"

Sunting: Berkat nimi selama 34 byte, pekerjaan bagus! : D

basile-henry
sumber
Dua hal lagi: Versi terbaru dari Prelude mencakup versi infiks dari map: <$>. replicate(...)' 'dapat digantikan oleh [1.. ...]>>" ". Semua dalam semua: unlines[([1..div(maximum(l<$>q)-l w)2]>>" ")++w|w<-q].
nimi
Ah ya saya ingat Anda menyebutkan infix peta baru di kiriman sebelumnya yang saya buat. Bagaimana cara kerja replika trik?
basile-henry
l1 >> l2membuat (panjang l1) salinan l2 dan menggabungkannya. Misalnya "abcd" >> [1,2]-> [1,2,1,2,1,2,1,2](<- 4 salinan 1,2 dalam satu daftar). Dalam kasus kami, [1..n]>>" "yang merupakan n salinan dari ruang yang sama dengan apa yang replicatedilakukan.
nimi
Bagus, terima kasih atas penjelasannya! :)
basile-henry
2

R, 126 byte

kode

for(z in 1){l=scan(,"");m=sapply(l,nchar);t=max(m[m==max(m)]);for(i in 1:length(m))cat(rep(" ",(t-m[i])/2),l[i],"\n", sep="")}

ungolfed

for(z in 1){                          # any way to get rid of this?
  l=scan(,"")
  m <- sapply(l,nchar)
  t <- max(m[m==max(m)])
  for(i in 1:length(m)){
    cat(rep(" ",(t-m[i])/2),l[i],"\n", sep="")
  }
}

Mungkin ada cara yang lebih baik untuk melakukan ini, masih bekerja di sana.

Mutador
sumber
1

Gema, 160 byte

\L<T>=@push{i;$0}@set{m;@cmpn{@length{$0};${m;};$m;$m;@length{$0}}}
?=
\Z=@repeat{@sub{@line;1};@set{o;@right{@div{@add{$m;@length{$i}};2};$i}\n${o;}}@pop{i}}$o

Ditulis sebagian besar untuk rasa ingin tahu saya untuk melihat apa yang bisa dilakukan dalam bahasa tanpa struktur array yang tepat dan instruksi loop yang tepat.

Contoh dijalankan:

bash-4.3$ gema '\L<T>=@push{i;$0}@set{m;@cmpn{@length{$0};${m;};$m;$m;@length{$0}}};?=;\Z=@repeat{@sub{@line;1};@set{o;@right{@div{@add{$m;@length{$i}};2};$i}\n${o;}}@pop{i}}$o' <<< $'Programming Puzzles\n&\nCode Golf'
Programming Puzzles
         &
     Code Golf
manatwork
sumber
1

Perl 6 , 61 byte

$/=(my@l=lines)».chars.max;for @l {put ' 'x($/-.chars)/2~$_} # 61 bytes

pemakaian:

$ perl6 -e '$/=(my@l=lines)».chars.max;for @l {put " "x($/-.chars)/2~$_}' <<< \
'Programming Puzzles
&
Code Golf'
Programming Puzzles
         &
     Code Golf
Brad Gilbert b2gills
sumber
Perl 5 akan memungkinkan Anda untuk menjatuhkan ruang dalam hal-hal seperti for @l {, cukur 2 byte, dan untuk perubahan put " "untuk put" ", rias byte lain. Apakah itu berlaku untuk Perl 6? (Saya tidak tahu Perl 6.) Juga, output Anda seperti yang ditampilkan di sini tidak cocok dengan output yang diperlukan; apakah itu salah cetak?
msh210
@ msh210 Perl 6 sedikit lebih ketat dengan sintaksnya. Itu lebih dari menebusnya di daerah lain sekalipun.
Brad Gilbert b2gills
1

Japt, 28 25

¡V=VwXl}R;¡Sp½*(V-Xl¹+X}R

Cobalah online!

Bagaimana itu bekerja

¡     V=VwXl}R;¡     Sp½*(V-Xl¹ +X}R
UmXYZ{V=VwXl}R;UmXYZ{Sp½*(V-Xl) +X}R

           // Implicit: U = input string, V = 0
UmXYZ{  }  // Map each item X in U through this function,
         R // splitting U at newlines beforehand:
  V=VwXl   //  Set V to max(X, Y.length).
           // V is now set to the length of the longest line.

UmXYZ{  }  // Map each item X in U with this function,
         R // again splitting U at newlines beforehand:
 ½*(V-Xl)  //  Take V minus X.length, and multiply by 1/2.
Sp         //  Repeat a space that many times.
        +X //  Concatenate X to the end.
Produksi ETH
sumber
0

PHP , 98 byte

function($s){foreach($a=explode("
",$s)as$l)echo str_pad($l,max(array_map(strlen,$a)),' ',2),"
";}

Cobalah online!

Tidak Disatukan:

function str_center( $s ) {
    $a = explode( PHP_EOL, $s );
    $m = max( array_map( 'strlen', $a ) );
    foreach( $a as $l ) {
        echo str_pad( $l, $m, ' ', STR_PAD_BOTH ), PHP_EOL;
    }
}

Keluaran:

Programming Puzzles
         &         
     Code Golf   
640KB
sumber