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 N
ukuran 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 kode-golf sehingga kode terpendek dalam byte menang!
sumber
foo(space)(space)(space)bar
adalah input yang bisa diterimaJawaban:
Pyth,
1917 byte2 byte berkat Jakube
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.
sumber
vim,
433635 byteTerlalu bagus untuk tidak diposkan. Perhatikan baris baru yang tertinggal; ini penting.
Terima kasih kepada @Marth karena telah menyimpan karakter!
format ramah vim:
Penjelasan:
sumber
sor!
untuk membalik urutan, Anda dapat menggunakancol("$")
untuk mendapatkan panjang dari baris pertama (sekarang terpanjang sejak urutan dibalik) alih-alih menggunakanG$
, menghemat total 1 byte! sunting : atau Anda dapat menyimpan pesanan pengurutan dan menggunakannyaG:let &tw=col("$")
sebagai gantinya.:h :sort
Saya 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 menghapusVGrx
(-4 byte) dan yang kedua membatalkan ( -1 byte). Anda juga dapat menggunakan|
pemisah alih-alih mem-<cr>
rantai perintah, yang memungkinkan Anda melewati:
sebelumnyalet
(-1 byte) (perhatikan bahwa Anda harus menggunakansor!
solusi saat itu,G
bukan merupakan perintah ex). Jadi:sor! /./|let &tw=col("$")|u|%ce
(dengan trailing<CR>
) harus menyimpan 2 byte.Mathematica, 96 byte
Jangan tanya saya bagaimana cara kerjanya, saya hanya mengotak-atiknya sampai menghasilkan output yang benar.
sumber
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.Penjelasan
Saya percaya ini mungkin jawaban Funciton pertama di situs ini yang menggunakan ekspresi lambda.
ǁ
untuk membagi string input pada baris baru (ASCII 10). Ini mengembalikan urutan malas.ɱ
(peta), memberikannya lambda yang menghitung panjang setiap string, dan kemudian melewati urutan terakhir⊤
untuk mendapatkan panjang garis terpanjang.ɱ
, 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.)ʝ
untuk menyatukan semua string, menggunakan baris baru (ASCII 10) sebagai pemisah.sumber
Retina ,
5452 byteThe
\t
s dapat diganti dengan tab yang sebenarnya, tapi aku telah menggunakan\t
di 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
1
untuk setiap karakter.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.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 grup1
(catatan yang.
tidak dapat cocok dengan umpan baris, jadi ini dibatasi ke satu baris). Akhirnya,(?(1)^)
menegaskan bahwa kami berhasil mengosongkan seluruh grup1
. 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.sumber
Jolf , 3 byte
Tidak bersaing, perbarui pertanyaan tanggal kiriman.
Coba di sini! .
¯ \ _ (ツ) _ / ¯ Saya pikir itu akan menjadi fungsi yang berguna.
sumber
JavaScript (ES6),
9391 byte2 byte disimpan berkat @ edc65 !
Penjelasan
Uji
Tampilkan cuplikan kode
sumber
.repeat
menerima dan memotong nilai-nilai non-integer, jadi Anda tidak perlu|0
CJam,
262319 bytePertama kali saya menggunakan CJam! Empat byte disimpan berkat Martin Büttner. Cobalah online.
Penjelasan
sumber
qN/_z,f{1$,m2/S*\N}
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.
sumber
Python 2,
8381 byteTerima kasih kepada @xnor karena telah menyimpan 2 karakter
contoh input:
contoh output:
Dan berakhir di tempat kedua dengan 84 byte menggunakan str.center () dan str.rstrip (terima kasih @JF).
sumber
len
ke variabel yang Anda gunakan dua kali - yang impas pada 5 karakter (sepertirange
). Anda juga dapat menggunakanmap
daftar comp.str.rstrip()
setelah meneleponcenter
untuk menyingkirkan ruang trailing.len(max(a,key=len))
, lihat ini .TeaScript , 24 byte
Loop melalui garis, menambahkan
floor((max line length - line length) / 2)
spasi ke awal.Tidak disatukan
Cobalah online
sumber
PowerShell, 58
67byteturun ke 58 byte berkat komentar @ mazzy:
$a
, loop atas setiap string|%{...}
.string.padleft()
metode pada setiap string, melalui% -member
pintasan, yang mengambil panjang garis akhir yang diinginkan sebagai parameter.array_longest_line_length/2 + current_line_length/2
current_line_length/2
->$_.length/2
sumber
Emacs Lisp, 203 byte
Tidak Disatukan:
Berpusat:
sumber
HTML, 40 byte
Tampilkan cuplikan kode
Cuplikan menyertakan
</xmp>
tag karena penampil cuplikan kode ingin agar tag saya seimbang.sumber
MATL , 22
31byteSetiap baris adalah input dengan garis trailing (yaitu, enterkeystroke). Baris kosong (dua enterpenekanan tombol) menandai akhir input.
Contoh
Penjelasan
sumber
Ruby,
766861 byteContoh dijalankan:
sumber
->t{(s=t.split$/).map{|l|l.center s.map(&:size).max}}
center
cara pertama, tetapi seperti yang saya mengerti, itu saja yang akan melanggar aturan "Trailing whitespace dalam output tidak diperbolehkan". Terima kasih untuk&:size
bagiannya - Saya juga mencobanya juga, tapi saya pasti membenturkan sesuatu di sekitar sintaks.Haskell,
1118177 byteInput ke fungsi f, output tidak dicetak.
Penggunaan: muat dalam juru bahasa
ghci center.hs
dan 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
sumber
map
:<$>
.replicate(...)' '
dapat digantikan oleh[1.. ...]>>" "
. Semua dalam semua:unlines[([1..div(maximum(l<$>q)-l w)2]>>" ")++w|w<-q]
.l1 >> l2
membuat (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 yangreplicate
dilakukan.R, 126 byte
kode
ungolfed
Mungkin ada cara yang lebih baik untuk melakukan ini, masih bekerja di sana.
sumber
Gema, 160 byte
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:
sumber
Perl 6 , 61 byte
pemakaian:
sumber
for @l {
, cukur 2 byte, dan untuk perubahanput " "
untukput" "
, 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?Japt,
2825Cobalah online!
Bagaimana itu bekerja
sumber
PHP , 98 byte
Cobalah online!
Tidak Disatukan:
Keluaran:
sumber
05AB1E , 2 byte
Dibangun dengan kaki ¯ \ _ (ツ) _ / ¯
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
(Preferensi ke kanan akan dengan modal
.C
sebagai gantinya: lihat perbedaannya .)sumber
Japt , 1 byte
Cobalah atau jalankan semua test case
sumber