Tulis program atau fungsi yang menggunakan string baris tunggal kosong. Anda dapat menganggapnya hanya berisi ASCII yang dapat dicetak tanpa ruang.
Cetak atau kembalikan bentuk permen ASCII art yang mirip dengan lemon atau jeruk nipis yang dibuat dari awalan tali.
Misalkan string input panjangnya n huruf. Kemudian, bentuk seperti itu terdiri dari 2n - 1 kolom seni ASCII yang dijahit bersama, masing-masing terdiri dari 2n - 1 garis. Menghitung dari 1, kolom k -th adalah f (k) = min (k, 2n - k) lebar karakter, dan berisi f (k) salinan karakter input f (k) pertama, berpusat secara vertikal, dengan single blank garis yang memisahkan salinan.
Misalnya, jika inputnya adalah Lemon
, outputnya harus:
Lemon
Lemo Lemo
Lem Lemon Lem
Le Lemo Lemo Le
L Lem Lemon Lem L
Le Lemo Lemo Le
Lem Lemon Lem
Lemo Lemo
Lemon
Jika inputnya adalah lime
output harus:
lime
lim lim
li lime li
l lim lim l
li lime li
lim lim
lime
Dan pola yang sama diikuti untuk input lain:
a
a
Be
Be
B B
Be
/\
/\
/ /
/\
cat
cat
ca ca
c cat c
ca ca
cat
|||
|||
|| ||
| ||| |
|| ||
|||
.__.
.__.
.__ .__
._ .__. ._
. .__ .__ .
._ .__. ._
.__ .__
.__.
$tring
$tring
$trin $trin
$tri $tring $tri
$tr $trin $trin $tr
$t $tri $tring $tri $t
$ $tr $trin $trin $tr $
$t $tri $tring $tri $t
$tr $trin $trin $tr
$tri $tring $tri
$trin $trin
$tring
Baris dalam output mungkin memiliki spasi tambahan dan mungkin ada satu baris tambahan opsional.
Kode terpendek dalam byte menang.
Jawaban:
Matlab,
140 136 128124 bytePada dasarnya pertama dimulai dengan bagian tengah, dan kemudian menambahkan / menambahkan versi singkat / modifikasi langkah demi langkah.
Terima kasih untuk 8 byte @LuisMendo!
Misalnya untuk
MATLAB
kita dapatkan:sumber
flip
: /Python 2,
121110 byte116 byte jika menggunakan
raw_input
. Program ini pada dasarnya melakukan masking berdasarkan L1-norm / Manhattan jarak dari pusat, serta paritas jarak ini dibandingkan dengan paritas panjang input.(Terima kasih kepada @Lynn untuk -9 byte dan membuka jalan untuk 2 lagi)
sumber
s
digunakan pada akhir garis panjang, jadi sayangnya itu tidak mungkinR
.R
membuat kode lebih rapi!MATL , 44 byte
Saya mengambil beberapa inspirasi dari jawaban @ flawr (walaupun algoritmenya tidak sama)
Input adalah string dengan tanda kutip tunggal.
Cobalah online!
sumber
JavaScript (ES6), 132 byte
Uji
sumber
Pyth, 32 byte
Demonstrasi
sumber
Jeli,
3226 byteCobalah online!
EDIT: Dennis menyimpan 6 byte. Terima kasih!
sumber
JavaScript,
187178 bytePendekatan bitwise. Fungsi
m
mendefinisikan topeng dengan mulai dari2 ** length
, misalnya00100
dalam biner, dan mendefinisikanm(n) = m(n-1) << 1 | m(n-1) >> 1
untuk paruh pertama. Menariknya, babak kedua dapat didefinisikan sebagaim(n) = m(n-1) << 1 & m(n-1) >> 1
. (meskipun program sebaliknya memilih untuk menentukanm(n) = m(2 * length - 1)
untuk paruh kedua) Dari sini topeng ini dapat digunakan untuk menentukan apakah kata atau ruang akan muncul dengan memeriksa2 ** column & m(row)
. Tentu saja dalam JavaScript lebih pendek untuk menulis2 ** something
dengan1 << something
...catatan: ditulis saat lelah.
MungkinHampir pasti memiliki kesalahan.sumber
Haskell, 109 byte
sumber
Brachylog , 46 byte
Cobalah online!
Hitungan byte yang mengerikan dan mungkin pendekatan yang lebih buruk (belum lagi Brachylog tidak dirancang dengan tepat untuk seni ASCII), tapi saya membuang banyak waktu untuk mempostingnya.
Hampir satu-satunya bagian pintar dari semua ini adalah penggunaan
a₁
untuk menghasilkan spasi vertikal terbesar-pertama sementaraa₀
menghasilkan kata awalan terkecil-pertama, danzz
untuk memperluas ruang tunggal menjadi blok ruang yang cocok dengan lebar awalan.sumber
TSQL, 259 byte
Golf:
Tidak Disatukan:
Biola
sumber
C, 167 byte
Program ini mengharapkan teks input untuk diteruskan sebagai parameter pertama ke program (melalui baris perintah atau yang lain) dan akan menulis output ke stdout.
Ini adalah upaya pertama saya di golf kode di sini karena sepertinya tantangan yang masuk akal, jadi mungkin bisa bermain golf lebih dari yang saya bisa hanya karena bagaimana saya melakukannya.
Penjelasan
Cukup signifikan untuk mencatat penggunaan
(n < m) ? n : (m * 2) - n
dalam program setidaknya dua kali untuk mendapatkan jarak terbalik dari posisi tengahm
pada rentangm * 2
dengan inputn
. Jika ada cara yang lebih pendek untuk melakukan itu maka itu bisa diturunkan lebih mudah karena algoritma itu penting untuk cara kerja program ini.sumber
C, 137 byte
Kerusakan:
Ini menarik setiap elemen dari grid 2n-1 x 2n-1, dengan fungsi topeng yang memutuskan apakah elemen saat ini harus berupa ruang kosong atau kata input (topeng memeriksa bentuk berlian dan pola kotak-kotak).
sumber