Dalam kompetisi olahraga, sering terjadi bahwa pemenang disajikan di podium, dengan orang yang berada di posisi pertama di tengah, orang di tempat kedua di ketinggian tengah di sebelah kiri, dan orang ketiga di tempat terendah dan ke kanan. Kita akan membuatnya kembali di sini dengan beberapa penyesuaian khusus.
Podium disajikan di bawah ini:
@---@
| @ |
@---@| | |
| @ || | |
| | || | |@---@
| | || | || @ |
Ini akan menjadi dasar untuk tantangan ini. Langkah selanjutnya adalah membuat podium cukup lebar agar sesuai dengan orang-orang (string ASCII yang dapat dicetak) yang ada di sana. Namun, kami ingin memastikan keindahan estetika (karena ini adalah kesempatan berfoto yang fantastis), sehingga setiap podium harus memiliki lebar yang sama, dan lebarnya harus aneh. Selain itu, orang-orang akan (jelas) ingin berdiri di tengah podium, sehingga senar harus dipusatkan sebaik mungkin. (Anda dapat menyelaraskan ke kiri atau kanan, dan itu tidak perlu konsisten.) Podium di atas adalah ukuran minimum, dan dianggap 3
lebar.
Misalnya, mengingat input yang ["Tom", "Ann", "Sue"]
mewakili tempat pertama, kedua, dan ketiga, output podium berikut:
Tom
@---@
Ann | @ |
@---@| | |
| @ || | | Sue
| | || | |@---@
| | || | || @ |
Namun, jika kita punya Anne
alih - alih Ann
, kita harus naik ke ukuran berikutnya 5
,, dan pusatkan string sebaik mungkin. Di sini, saya menyelaraskan sehingga huruf "ekstra" Anne
adalah di sebelah kiri tengah, tetapi Anda dapat memilih sisi mana yang akan diluruskan.
Tom
@-----@
Anne | @ |
@-----@| | |
| @ || | | Sue
| | || | |@-----@
| | || | || @ |
Mari kita cari nama yang lebih panjang. Bagaimana dengan ["William", "Brad", "Eugene"]
:
William
@-------@
Brad | @ |
@-------@| | |
| @ || | | Eugene
| | || | |@-------@
| | || | || @ |
Di sini kita dapat melihat bahwa Brad
memiliki banyak ruang putih, Eugene
kurang begitu, dan William
pas.
Untuk test case yang lebih lama, bagaimana dengan ["A", "BC", "DEFGHIJKLMNOPQRSTUVWXYZ"]
:
A
@-----------------------@
BC | @ |
@-----------------------@| | |
| @ || | | DEFGHIJKLMNOPQRSTUVWXYZ
| | || | |@-----------------------@
| | || | || @ |
Akhirnya, kami memiliki input sekecil mungkin, seperti ["A", "B", "C"]
:
A
@---@
B | @ |
@---@| | |
| @ || | | C
| | || | |@---@
| | || | || @ |
- Input dan output dapat diberikan dengan metode apa pun yang mudah .
- Input dijamin non-kosong (yaitu, Anda tidak akan pernah menerima
""
sebagai nama). - Anda dapat mencetaknya ke STDOUT atau mengembalikannya sebagai hasil fungsi.
- Program lengkap atau fungsi dapat diterima.
- Berapapun ruang kosong ekstranus dapat diterima, asalkan karakter berbaris dengan tepat.
- Celah standar dilarang.
- Ini adalah kode-golf sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
Jawaban:
JavaScript (ES8), 196 byte
Cobalah online!
sumber
Groovy ,
187,176,156, 150 byteCobalah online!
(catatan: tio groovy interpreter tidak dapat menangani Daftar pengindeksan menggunakan nilai Long meskipun groovy 2.5.6 bisa. Jadi, jawaban tio menggunakan
*.toShort()
alih-alih*.toLong()
yang menambahkan byte)Menentukan penutupan
f
yang dapat dipanggil melalui:di mana
f
mengembalikan sebuah string.Penjelasan:
Membatalkan kode, kami memiliki:
f={n->
- mendefinisikan penutupan f dengan satu in-paramn
m=n*.size().max()|1
- cari nama maksimal len, biner-atau ke nomor ganjilh=' '*(m/2)
- h akan berisi ruang lantai (m / 2), digunakan nantia=...
- membuat daftar penyandian dengan elemen:@---@
pola, empuk ke len| @ |
pola, empuk ke len| | |
pola, empuk ke len'307...'*.toLong().sum{a[it]}
- Gunakan indeks ke dalam daftar penyandian untuk membangun hasilnya..sum
menggunakan fakta bahwa string + string di groovy valid.'3073...'*.toLong()
menggunakan*.
operator spread untuk memanggiltoLong()
setiap karakter, mengembalikan daftar nomor.a
telah di-inline, neline dihapus dllsumber
Kanvas , 45 byte
Coba di sini!
Penjelasan:
Pelanggaran "dan itu tidak perlu konsisten", membuatnya cukup tidak dapat dipahami.
sumber
Python 2 ,
197190 byteCobalah online!
-6 byte, terima kasih kepada Andrew Dunai
sumber
x,y,p='@| '
dan menggunakanp
bukannya' '
Python 2 , 157 byte
Cobalah online!
sumber
Arang , 63 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Hitung jumlah ruang di setiap setengah podium.
Lingkari setiap tempat. Perhatikan bahwa input diharapkan berada pada urutan ke-2, ke-1, ke-3.
Posisikan ke awal baris yang akan memiliki teks.
Keluarkan teks dengan bantalan kiri yang cukup untuk menempatkannya di tengah.
Dapatkan ketinggian podium.
Gambar podium.
Pendekatan alternatif, juga 63 byte:
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Hitung jumlah ruang di setiap setengah podium.
Lingkari setiap tempat. Perhatikan bahwa input diharapkan berada pada urutan ke-2, ke-1, ke-3.
Posisikan ke awal baris yang akan memiliki teks.
Keluarkan teks dengan bantalan kiri yang cukup untuk menempatkannya di tengah.
Keluarkan juga bagian atas podium dengan memasukkan
-
s di antara karakter string@-@
untuk mencapai lebar yang benar.Cetak sisa podium dengan
|
menempatkan huruf s dengan tepat, kecuali karakter tengahnya adalah@
pada baris pertama.sumber
R
308302299-6 byte terima kasih kepada @JAD
-3 byte terima kasih kepada @Guiseppe, sekarang aku di bawah 300
Mungkin ada cara yang lebih baik untuk membuat tata letak; Saya harus mencoba opsi apa yang saya miliki untuk frame data.
Cobalah online
sumber
i=max(1,nchar(a)%/%2)
. Membuatmatrix
dan menggunakanwrite
mungkin lebih pendek (daripada adata.frame
). Saya sarankan menggunakanformat
denganj="c"
untuk membenarkan hal-hal, danstrrep
sangat membantu dalam hal ini. Mungkin mencoba chatroom golfR untuk memunculkan ide?strrep
; Saya harus melihat itu.Bersih , 209 byte
Cobalah online!
sumber
Python 2 , 188 byte
Cobalah online!
Terima kasih kepada TFeld .
sumber
PHP, 147 byte
golf 93 byte dari ide awal saya, lurus ke depan
<?=
:mengambil nama dari argumen baris perintah. Jalankan dengan
-nr
atau coba online .Membutuhkan PHP 7; menghasilkan peringatan di PHP 7.2 (dan kemudian, mungkin). Lihat TiO untuk perbaikan +5 byte.
pemetaan:
kerusakan:
Selisih lebih awal untuk
$i
menyelamatkan saya dari segala trik untuk baris baru.Kosong untuk
6
juga bisa kosong; jadi saya melakukan itu.Tetapi menggunakan
$argv[0]
untuk string perbatasan atas-
adalah golf terbaik yang pernah ada. (dan menyimpan 9 byte!)sumber
Pergi, 436 byte
Pergi sangat buruk untuk golf. Tapi:
Rusak:
sumber
Java 8,
399394373 BytesSolusi ini mungkin terlalu lama, tetapi ini adalah solusi :)
Disimpan 5 Bytes dengan langsung iterasi dalam urutan (a = 1,0,2 bukannya q = 0,1,2; a = f (q))Disimpan 21 Bytes berkat @KevinCruijssen:Seperti yang disarankan oleh @KevinCruijssen, kita juga bisa menggunakan
var
daripadaString
di Java 10+ dan menyimpan beberapa Bytes tambahan. Saya tidak melakukan ini karena alasan sederhana bahwa saya belum memiliki Java 10: D juga, lambdas dapat digunakan. Tetapi ini hanya akan mengurangi jumlah byte jika kita tidak menetapkannya sebagaiFunction<String[],String>
variabel.Dalam bentuk yang diperluas:
Input harus diberikan sebagai
String
-array panjang 3. Contohnya terlihat seperti ini:Keluaran:
sumber
var
bukannyaString
; mengisi array-panjang dengan untuk-setiap loop; diubahif(m%2==0)m++;if(m==3)m=5;
menjadim+=m%2<1?m==2?3:1:0
untuk efek yang sama; mengubah semua%nr==0
menjadi%nr<1
; mengubah%(m-1)
ke%~-m
; letakkan segala sesuatu di dalam loop itu sendiri sehingga tanda kurung{}
dapat dihapus.m-l[a]>>1
bukannya(m-l[a])/2
dani<k+2?" ":j%~-m<1?"|":j==m/2?i==k+2?"@":"|"
bukannyai>=k+2?j%~-m<1?"|":j==m/2?i==k+2?"@":"|":" "
C (GCC)
302293292289287 byte-6 byte terima kasih kepada ceilingcat
Jalankan di sini
Tidak digabungkan dan dijelaskan (secara teknis Anda tidak dapat memiliki komentar setelah memangkas makro, sehingga ini tidak akan berjalan)
Ini kode panggilannya
dan output
sumber
for(;i--;memset(D+1,45,w))w=w<(L[i]=strlen(N[i]))?L[i]|1:w;
alih-alihfor(;i--;)w=w<(L[i]=strlen(N[i]))?L[i]|1:w;memset(D+1,45,w);
PowerShell untuk Windows,
231223 byteCobalah online!
Input adalah array
@('second','first','third')
. Versi belum dibuka:sumber
Stax , 43 byte
Jalankan dan debug itu
sumber