Di tempat pemakaman Raja Silo dari Asturias ada tulisan yang bertuliskan SILO PRINCEPS FECIT ( Raja Silo membuat ini ).
Huruf pertama ditemukan di bagian paling tengah, dan dari sana seseorang membaca dengan pergi ke arah non-diagonal yang memancar keluar. Huruf terakhir ditemukan di keempat sudut. Dalam tantangan ini, Anda akan menggeneralisasi proses untuk membuatnya.
Memasukkan
String ( atau setara ), dan integer. Anda dapat membuat asumsi berikut tentang input:
- String akan memiliki panjang yang aneh.
- Bilangan bulat akan menjadi angka ganjil antara 1 dan satu kurang dari dua kali panjang string.
Keluaran
Sebuah labyrinthica inscriptio untuk string, menggunakan bilangan bulat untuk tinggi atau lebar (lihat model untuk contoh tinggi). Output harus setiap huruf tanpa spasi, jeda baris sebagai default untuk sistem / bahasa Anda.
Uji kasus
Perhatikan bahwa input 1 atau (panjang * 2 - 1) akan menghasilkan palindrom horizontal atau vertikal.
Input: FOO, 3 Input: BAR, 1 Input: BAR, 3 Input: BAR, 5
Output: OOO Output: RABAR Output: RAR Output: R
OFO ABA A
OOO RAR B
A
R
Input: ABCDE, 5 Input: ABCDE, 3 Input: *<>v^, 5
Output: EDCDE Output: EDCBCDE ^v>v^
DCBCD DCBABCD v><>v
CBABC EDCBCDE ><*<>
DCBCD v><>v
EDCDE ^v>v^
Mencetak gol
Ini adalah kode-golf sehingga jawaban terpendek dalam byte menang. Celah standar dilarang.
Jawaban:
J , 27 byte
Cobalah online!
Contoh akan memperjelas pendekatan tingkat tinggi.
Mempertimbangkan
'ABCDE' f 3
Kami perhatikan bahwa yang kami cari hanyalah tabel "lintas tambahan" dari
1 0 1
dan3 2 1 0 1 2 3
, yang terlihat seperti ini:Kami kemudian menarik mereka indeks dari string asli:
[{~
.Semua sisa kode aritmatika hanya membosankan dan penggunaan
i:
untuk membangun argumen1 0 1
dan3 2 1 0 1 2 3
.sumber
Jelly , 12 byte
Cobalah online!
Sebuah diad link mengambil string sebagai kiri dan tingginya sebagai argumen yang tepat. Mengembalikan string dengan jeda baris. Jika daftar string dapat diterima untuk output, saya dapat menghapus
Y
penghematan akhir byte. Menariknya "SILO PRINCEPS FECIT" yang asli terlihat bagi saya seperti seni berlian 3D ASCII ketika saya melihatnya di TIO.Penjelasan
sumber
R ,
939187 byte-2 byte terima kasih kepada Giuseppe. -4 byte dengan memasukkan lebar daripada tinggi, sebagaimana diizinkan oleh OP.
Cobalah online!
Mengambil input sebagai vektor karakter. Bagian kuncinya adalah
s[1+outer(abs(-w:w),abs(-h:h),'+')]
.abs(-w:w)
abs(-h:h)
abs(-h:h)
outer(abs(-2:2), abs(-1:1), '+')
(kita kemudian perlu menambahkan 1 karena R adalah 1-diindeks.) 0 di tengah adalah tempat huruf pertama dari input harus pergi.
Sisanya diformat.
sumber
Arang ,
2519 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Gambar seperempat dari prasasti itu.
Renungkan untuk menyelesaikan tulisan.
sumber
Japt
-R
,1916 byteCobalah
sumber
Bahasa Wolfram (Mathematica) ,
5754 byteCobalah online!
Mengambil lebar sebagai input.
sumber
g
tidak dievaluasi saat pertama kali fungsi dipanggil. Cobalah online!Print/@f[...]
->Print/@Transpose[g[...]]
->Transpose[Print@g[...]]
, dimana waktug
didefinisikan.Japt
-R
, 10 byteMengambil lebar alih-alih tinggi.
Cobalah
Pseudocode (U adalah string, V adalah bilangan bulat):
sumber
Perl 6 ,
6867 byteCobalah online!
sumber
Python 3, 104 byte
Saya belum bermain golf begitu lama ... Saya yakin ini bisa lebih pendek.
Detail
Kode ini mendefinisikan fungsi yang mengambil dua argumen (string dan tinggi) dan memberikan hasil pada output standar.
Indeks ke dalam string adalah jarak Manhattan dari pusat grid. Untuk kisi lebar
w
dan tinggih
, jarak sel(x, y)
adalahabs(x - (w - 1) / 2) + abs(v - (h - 1) / 2)
.Lebar kisi harus sedemikian rupa sehingga jarak sudut Manhattan (katakanlah
(0, 0)
) adalah satu kurang dari panjang tali. Mengganti(0, 0)
menjadi di atas dan menyederhanakan, kami menemukan bahwa lebarnya sederhana2 * len(s) - h
.Kode
Cobalah online!
sumber
05AB1E , 10 byte
Cobalah online!
sumber
Pyth , 19 byte
Cobalah online!
sumber
Python 2 , 95 byte
Cobalah online!
sumber
Stax ,
119 byteJalankan dan debug itu
Dibutuhkan lebar, dan string asli, dalam urutan itu.
sumber
C # (.NET Core) , 146 byte
Cobalah online!
Jawaban terpanjang begitu lama. :-) Ini menggunakan jarak Manhattan ke pusat alun-alun. Namun, harus ada cara yang lebih singkat.
sumber
Tcl ,
188170162 byteCobalah online!
Tampaknya ada sejuta cara buruk untuk mengatasi masalah ini di TCL. Ini bukan yang terburuk dari mereka.
Disimpan minimum 18 byte dengan mengonversi ke lambda (dapat menyimpan hingga 13 lebih jika nilai pengembalian daftar garis dapat diterima)
Menyimpan tambahan 8 sejak lmap iterator berfungsi sebagai konstanta tambahan
sumber
Kanvas , 18 byte
Coba di sini!
Kanvas tidak melakukan substring, jadi saya perlu memperlakukannya seperti benda seni dan mendapatkan subbagian seperti itu. Saya merasa ini menghabiskan 2 byte, tapi hei, apa yang bisa Anda lakukan.Sepertinya ini sebenarnya tidak berfungsi seperti yang saya kira: Fungsi palindromize Canvas mencerminkan karakter tertentu (mis. V mirroring secara vertikal menjadi ^), dan saya tidak bisa menonaktifkannya ... oh well, saya kira
sumber
Ruby , 65 byte
Cobalah online!
sumber