Diberikan string non-kosong, dengan panjang genap, dan bilangan bulat positif n, yang mewakili tingginya, menyusun piramida menggunakan aturan berikut:
Piramida harus berisi n garis-garis yang tidak kosong; mengikuti baris baru diizinkan. Untuk setiap 1 <= i <= n, baris ke-i harus berisi string dengan setiap karakter individu diulang di tempat i kali; abcd diulang 3 kali sehingga menjadi aaabbbcccddd. Setiap garis harus dipusatkan dengan ruang bantalan sehingga bagian tengah dari setiap garis lurus secara vertikal. Ruang tambahan di akhir setiap baris diizinkan. Anda juga dapat memiliki hingga satu baris baru, tetapi tidak ada spasi putih sebelum baris pertama.
String input tidak dijamin sebagai palindrom.
Kasus cobaan
s = 'o-o o-o', n = 10:
o-o o-o
oo--oo oo--oo
ooo---ooo ooo---ooo
oooo----oooo oooo----oooo
ooooo-----ooooo ooooo-----ooooo
oooooo------oooooo oooooo------oooooo
ooooooo-------ooooooo ooooooo-------ooooooo
oooooooo--------oooooooo oooooooo--------oooooooo
ooooooooo---------ooooooooo ooooooooo---------ooooooooo
oooooooooo----------oooooooooo oooooooooo----------oooooooooo
Jawaban:
05AB1E , 9 byte
Cobalah online!
γ
dalam jumlah yang tidak sedikit, diilhami oleh jawaban Adnan; tetapiS
juga akan bekerja.sumber
05AB1E , 11 byte
Menggunakan penyandian 05AB1E . Cobalah online!
sumber
»
bergabung dengan array dalam dengan spasi. Menggantinya denganJ
harus bekerja (dan saya pikir Anda harus memposting itu sebagai jawaban yang berbeda).Jelly ,
1413 byteCobalah online!
Bagaimana itu bekerja
sumber
C # (.NET Core) ,
139 137 136130 byteCobalah online!
Mengembalikan enumerasi
string
s dengan garis-garis gambar. Setelah bergabung hasilnya adalah seperti ini:sumber
(n-i-1)*s.Length/2
. Dan saya suka test case Anda. +1 :)ಠ_ಠ
mengintensifkan~i
sama dengan-i-1
", sehingga Anda dapat menyimpan byte dengan mengubah(n-i-1)
ke(n+~i)
.s=>n=>...
untuk byte lainnew string(' '...
dengan"".PadLeft(...
Cheddar ,
7164 byteDisimpan 7 byte berkat @NilaiInk
Cobalah online! Saya akan menambahkan penjelasan sedikit
Penjelasan
sumber
center
fungsi yang dapat Anda gunakan seperti yang saya miliki pada jawaban Ruby saya, karena itu berpotensi menghemat byte juga.Ruby , 58 byte
Cobalah online!
sumber
Java 8,
188186185183181173 byte-2 byte (185 → 183) karena perbaikan bug (itu menghasilkan
n+1
garis bukann
). Tidak sering terjadi bahwa perbaikan bug menghemat byte. :)-2 byte (183 → 181) berkat @ OlivierGrégoire
Penjelasan:
Coba di sini.
sumber
r="",q=s.format("%"+x+"s",r)
untuk menyimpan 2 byte. Banyak langkah untuk hanya dua byte :(s.format("%"+x+"s",r)
secara langsung, saya dapat menyimpan 8 byte lagi setelah golf Anda. :)JavaScript (ES6), 85 byte
Mengambil input dalam sintaks currying
(string)(height)
. Termasuk baris baru terkemuka.Demo
Tampilkan cuplikan kode
sumber
Arang , 19 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Kita perlu garis berulang
1..n
kali. Cara termudah untuk mencapai ini adalah untuk loop dari 0 ke n, karena loop 0 pada dasarnya adalah no-op.Posisikan kursor sehingga garis yang dihasilkan berada di tengah.
Dan ini adalah cara sederhana mencetak setiap karakter berulang
i
kali.sumber
Python 2 ,
7577 byteCobalah online!
sumber
center
builtin? Saya benar-benar perlu membaca dokumen kadang-kadang: Pn-1
baris.9
garis piramida ketika inputnya10
...SOGL V0.12 , 14 byte
Coba Di Sini!
sumber
∫dI
.Javascript, 105 byte
Setelah beberapa tahun libur, Stretch Maniac kembali, semoga sedikit lebih berpendidikan kali ini.
sumber
s=>n=>[...Array(x=n)].reduce(a=>a+'\n'.padEnd(--x*s.length/2+1)+s.replace(/./g,c=>c.repeat(n-x)),'')
- Anda harus mengganti'
s dengan backticks dan\n
dengan baris baru literal.Haskell ,
797369 byteCobalah online!
sumber
..
, Anda bisa dropdiv
:(' '<$[1,3..(n-m)*length s])
.APL (Dyalog) ,
3331 byte2 byte di-golf berkat @ZacharyT dengan menghapus tanda kurung yang tidak perlu
Cobalah online!
Penjelasan
Argumen kanan
⍵
adalah string dan argumen kiri⍺
adalah angka.sumber
⍺-⊢
?Prolog SWI, 398 byte
Ini bukan solusi yang paling ringkas (mungkin di suatu tempat menciptakan kembali roda alih-alih menggunakan prosedur bawaan), tetapi lebih cocok untuk digunakan.
Uji:
Penjelasan:
w dan s menulis jumlah ruang terdepan yang tepat:
d mengelola "duplikasi" karakter dan e adalah fasilitas rekursifnya:
a dan l menambahkan hasilnya (mungkin ada prosedur bawaan?):
o menciptakan output:
dan akhirnya p adalah metode utama :
sumber
Japt ,
20 + 1 = 2119 + 1 = 2014 byteOutputs array baris - tambahkan 2 byte jika itu tidak diizinkan.
Menguji
Penjelasan
sumber
SpUl
ke ... menunggu, Nevermind :( Anda dapat menyimpan byte meskipun dengan mengganti(V-X
denganXnV
, jika saya tidak salah.n
; terima kasih @ETHproductions.PHP, 113 byte:
Jalankan dengan
php -nr '<code>' '<string>' <N>
atau coba online .kerusakan
sumber
CJam , 36 byte
Cobalah online!
sumber
T-SQL, 223 byte
Input melalui tabel t yang sudah ada sebelumnya dengan kolom s dan n , sesuai standar IO kami .
Tidak banyak yang bisa dijelaskan, ini adalah simpul bersarang yang cukup mudah, digunakan
@i
untuk baris dan@j
untuk menelusuri karakter string yang merupakanREPLICATED
@i
kali:sumber
R ,
12595 byteCobalah online!
Penjelasan:
Ini cukup mudah, membelah string dan mengulang elemen
i
kali masing-masingrep(s,e=i)
(e
kependekaneach
) saat kita loop. Bagian yang sulit adalahrep('',(n-i)/2*length(s)+1)
. Ini adalah string padding, tapi ini adalah string kosong. Saya perlu menambahkan 1 karena jika tidak hasilnya adalahcharacter(0)
, vektor panjang nol, dancat
, yang secara default memisahkan elemen-elemennya dengan spasi, menyelaraskan garis akhir.sumber
Mathematica, 97 byte
memasukkan
sumber
Tcl,
143142141138 byteUji:
Catatan: "cd" pada akhir prosedur mencegah hasil waktu untuk dicetak di bawah piramida, tetapi mengubah direktori saat ini - efek samping yang tidak secara eksplisit dilarang.
Terima kasih kepada sergiol untuk sebuah petunjuk untuk menghemat satu byte .... dan petunjuk lain untuk menyimpan satu byte lagi.
Berkat aspek (pada tcl chat) untuk 3 byte lainnya disimpan!
sumber
Swift, 232 byte
Mungkin bisa lebih baik, tetapi saya tidak punya banyak waktu untuk refactor.
Jawaban ini menggunakan Swift 4, sehingga saat ini tidak dapat dijalankan online.
sumber
LOGO,
9795 byteCoba kode pada penerjemah FMSLogo.
Tetapkan fungsi
f
yang mengambil dua input,:s
dan:n
, kemudian cetak hasilnya.sumber
Java 8,
164148 bytePenjelasan:
sumber
Karat, 107 byte
tautan playpen
Menentukan fungsi anonim yang mengambil irisan dan angka string, mencetak pola yang diinginkan ke output standar. Diasumsikan bahwa slice string hanya berisi karakter ASCII, tetapi tantangannya tidak pernah menentukan bahwa dukungan unicode penuh diperlukan. Untuk memperbaiki unicode juga akan membutuhkan 117 byte:
Penjelasannya agak sederhana:
sumber
SOGL V0.12 , 8 byte
Coba Di Sini!
Penjelasan:
Saya tidak ingin memperbarui jawaban lama saya di sini karena menggunakan metode yang berbeda dan menggunakan fitur baru (er daripada tantangan) -
╚
sumber
Python 2 ,
7977 byteCobalah online!
Sunting: -2 bytes milik @FlipTack
sumber
[i*(n-m)for i in s]
, karena.join
mampu mengambil generator, yang seharusnya membuat Anda dua byte.Excel VBA, 98 Bytes
Fungsi jendela langsung VBE anonim yang mengambil input sebagai string dari
[A1]
dan int dari[B1]
kemudian output ke jendela langsung VBEsumber