Menyelaraskan garis!
Diberikan karakter dan string multiline, tugas Anda adalah memberi pad setiap baris string sehingga mereka berbaris di antara pembatas yang diberikan.
Contohnya
Memasukkan:
,
Programming, Puzzles
And, Code golf
Keluaran:
Programming, Puzzles
And, Code golf
Memasukkan
Input akan berupa string multiline dan karakter (yang akan Anda selaraskan), Anda dapat mengambil ini dalam urutan / format yang Anda inginkan. Karakter akan muncul tepat sekali per baris. Setiap baris input mungkin berbeda panjangnya.
Input bisa melalui argumen fungsi atau STDIN.
Keluaran
Outputnya harus string yang sama berpusat. Anda diizinkan satu trailing baris baru dan tidak ada spasi spasi tambahan.
Keluaran harus diisi dengan jumlah ruang minimum . Anda tidak dapat menghapus spasi putih terkemuka di input (jika ada).
Output bisa dari fungsi return atau STDOUT.
code-golf
string
whitespace
Downgoat
sumber
sumber
Jawaban:
Pyth, 18 byte
sumber
APL (37)
APL hanya tidak pandai memproses string (atau tentu saja saya tidak pandai bermain golf).
Ini mengambil karakter sebagai argumen kiri, dan string multiline sebagai argumen kanannya. Diasumsikan bahwa string multiline diakhiri dengan linefeed (mis.
A\nB\nC\n
DaripadaA\nB\nC
.) Karena saya dapat menggunakan "format apa pun yang saya inginkan", dan ini juga merupakan format konvensional untuk file teks, saya pikir ini masuk akal.Penjelasan:
S←⌽⍵
: balikkan string, dan simpan diS
.R←S⊂⍨S=⊃S
: splitS
pada karakter pertamanya, dan menyimpan array stringR
.⍺⍳¨⌽¨R
: balikkan setiap stringR
, dan kemudian menemukan indeks index (karakter) di setiap string.(⌈/-+)
: kurangi masing-masing indeks dari indeks terbesar, dengan memberikan jumlah ruang yang dibutuhkan' '/⍨¨
: untuk masing-masing nilai tersebut, hasilkan banyak ruangR,¨
: tambahkan spasi ke setiap string diR
.∊
: gabungkan semua string bersama⌽
: balikkan (untuk mendapatkan pesanan asli kembali)Contoh:
sumber
CJam,
232220 byteTerima kasih kepada Dennis karena telah menghemat 2 byte.
Ini membaca baris dari argumen command-line dan karakter dari STDIN.
Penerjemah online tidak mendukung argumen baris perintah, tetapi Anda dapat menguji versi yang setara di sini.
Penjelasan
sumber
Pip ,
222018 + 1 = 19 byteMengambil string sebagai argumen baris perintah dan pembatas dari STDIN ( ide dipinjam dari jawaban CJam Martin ). Menggunakan
-n
flag untuk mencetak nilai output pada baris yang berbeda.Dan contoh dijalankan:
sumber
JavaScript ES 2015, 113 byte
Tidak sesingkat bahasa golf yang diposting sejauh ini. Mengambil input sebagai dua argumen fungsi, mis
f(',','Programming, Puzzles\nAnd, Code golf')
. Cuplikan di bawah tidak disunat dan termasuk metode yang mudah untuk diuji.sumber
Pyth,
2724 byteDiperbarui untuk Pyth terbaru .
Demo langsung.
Versi 27 byte
Demo langsung.
sumber
jbm
di awal jawaban Anda, Anda harus segera mulai memikirkanV
.b
Julia, 117 byte
Tidak Disatukan:
sumber
Python 3, 85 (IDLE 3.2.2, Windows)
Cukup mudah. Ini menemukan posisi karakter dalam string dua kali: sekali untuk menemukan maks (baik, sekali per baris), dan sekali untuk menemukan offset. Saya mencoba menggabungkan ini tetapi lebih lama.
Python 3 digunakan untuk membongkar input. MY IDLE tampaknya mengambil string multiline sebagai input.
sumber
c
dapatkan pembatas dans
mendapat daftar kosong. Panggilan selanjutnya untukinput()
mengembalikan baris yang tersisa satu per satu.Jelly , 12 byte
Cobalah online!
Dikerjakan dan golf dengan koindengan caird di J elly H yper T raining (JHT) , ruang obrolan Jelly kami.
Bagaimana itu bekerja
Argumen baris perintah ketiga (input pertama) harus berupa string multi-baris, dan karakter harus menjadi argumen baris perintah keempat (input kedua).
Saya tidak yakin apakah mengambil input sebagai daftar baris diperbolehkan, jadi ini mengambil string multiline sebagai input. Jika diizinkan:
10 byte
Cobalah online!
sumber
Matlab / Oktaf, 106 byte
Fungsi yang menggunakan tiga argumen terpisah untuk karakter, string, string; dan menghasilkan stdout:
Contoh di Matlab:
Atau coba online dengan penerjemah Octave.
sumber
Julia, 80 byte
Tidak Disatukan:
sumber
JavaScript (ES6), 105
Menggunakan string template, 2 baris baru itu signifikan dan dihitung.
Tes menjalankan cuplikan di peramban apa pun yang kompatibel dengan EcmaScript 6 (yaitu FireFox. Chrome tidak mendukung parameter default)
sumber
Python 2, 93 byte
Disebut seperti ini:
sumber
C # 4.0,
329320307 byteVersi tidak disatukan:
Itu menerima maksimum 9999 baris ...
sumber
Dyalog APL ,
222016 byte-4 Terima kasih kepada ngn.
APL sebenarnya tidak terlalu buruk dalam pemrosesan string, jika diizinkan untuk bekerja dengan array. Dalam tantangan ini, kita dapat memilih format yang paling tepat, yang untuk APL berarti vektor vektor teks sebagai argumen kiri, dan pembatas sebagai argumen skalar kanan. Ini bahkan menangani beberapa pembatas per baris, dan meluruskan yang pertama dari setiap baris.
⊣,¨⍨
tambahkan setiap baris dengan' '⍴¨⍨
ruang sebanyak⌈.⍳
indeks paling kanan dari karakter di antara baris-
minus⍳¨
indeks karakter di setiap barisCoba APL online! (
↑
ditambahkan untuk mencetak hasil secara vertikal)Bonus? Berfungsi untuk sejumlah string, dan pembatas (sejajar dengan paling kiri).
sumber
⊣,¨⍨' '⍴¨⍨⌈.⍳-⍳¨
C #, 191
Sebagai fungsi. Kira-kira porting jawaban JS saya.
sumber
Ruby, 74 byte
dan menyebutnya seperti
sumber
R, 68 byte
Fungsi tanpa nama yang mengambil
3
input;c
yang merupakan karakter untuk disejajarkan,x
adalah string pertama dany
string kedua.Dalam R, fungsi
regexpr
mengembalikan posisi pola yang diberikan dalam string. Solusinya bekerja dengan menerapkanregexpr
pada kedua string dan mengulangi ruang putih sebesar perbedaan dan selanjutnya hanya mencetak kedua input yang dipisahkan oleh baris baru.sumber
Python 2,
6766 byteDisebut dengan:
sumber
Moonscript, 138 byte
Ini mengembalikan fungsi yang membutuhkan 2 argumen. Yang pertama adalah string, yang kedua adalah karakter untuk disejajarkan. Argumen ini adalah argumen implisit @, dan n.
Pertama, saya menambahkan baris baru ke string, untuk mempermudah pemrosesan.
Sekarang, saya membuat daftar posisi setiap karakter pelurusan, menggunakan
gmatch
. Selanjutnya, saya mengganti baris baru sebelum setiap baris dengan jumlah spasi yang benar, kemudian memotong baris baru yang saya tambahkan di awal.sumber
Lua, 169 byte
Tidak sesingkat jawaban lain tetapi ini adalah yang pertama: D
sumber
Retina , 71 byte
Cobalah online! Catatan: Ini meninggalkan karakter penyelarasan di output; itu dapat dihapus dengan biaya 4 byte. Jika hanya dua string yang perlu disejajarkan, maka untuk 52 byte:
Penjelasan:
Ini cocok dengan karakter pelurusan.
Ini cocok dengan baris pertama dan juga melacak berapa banyak karakter yang ada sebelum karakter pelurusan. (.NET menyimpan tumpukan kecocokan untuk setiap variabel, dalam hal ini
$3
,.)Ini cocok dengan baris kedua, mencoba menghitung sebanyak karakter yang kami temukan di baris pertama.
?<-3>
menyebabkan kecocokan untuk mengeluarkan tumpukan untuk setiap karakter, sampai kosong, pada titik mana kecocokan gagal, dan(.)*
kemudian cocok dengan karakter yang tersisa sebelum karakter perataan. Pada titik ini kita memiliki variabel berikut:$1
berisi karakter pelurusan$2
berisi baris pertama$3
berisi tumpukan yang panjangnya adalah awalan baris pertama dikurangi awalan baris kedua$4
berisi baris kedua$5
berisi tumpukan yang panjangnya adalah awalan baris kedua minus awalan baris pertama$#5$*
lalu awali jumlah spasi yang diperlukan untuk membuat baris pertama sejajar dengan yang kedua, dan sebaliknya untuk$#3$*
.Logika yang sama berlaku untuk jawaban utama, kecuali di sini kita harus menemukan dua baris yang tidak sejajar sehingga kita dapat menyelaraskannya (ini adalah di mana yang
?(5)
datang) dan kemudian ulangi perataan di semua baris sampai semuanya sama rata .sumber
Gangguan Umum, 101 byte
Parameter pertama adalah karakter, yang kedua adalah daftar string yang akan disejajarkan.
Cobalah online!
sumber