The festival pertengahan musim gugur telah dimulai!
Sayangnya, semua kue bulan saya dicuri - harganya terlalu mahal untuk orang-orang kecil seperti saya, dan saya khawatir saya tidak akan bisa makan tahun ini!
Jadi saya meminta bantuan Anda. Apakah Anda bisa membuatkan saya beberapa?
Bagi mereka yang tidak sadar, izinkan saya mendidik Anda tentang seperti apa kue bulan.
Kue bulan datang dalam berbagai ukuran!
Jadi saya akan memberi Anda masukan saya , n , ketika saya menginginkannya.
Berikut adalah beberapa contoh output yang saya inginkan:
Kue bulan ukuran n = 3:
(@@@@@)
(@MAF@)
(@@@@@)
Kue bulan ukuran n = 6:
(@@@@@@@@@@@)
(@ @)
(@ M @)
(@ F @)
(@ @)
(@@@@@@@@@@@)
Artinya, kue bulan ukuran n adalah:
- n garis tinggi
- Panjang 2n - 1 @s
- Panjang 2n + 1 karakter (@s dan kurung)
Dan Anda lebih baik tidak melemparkan saya kue bulan latihan terlalu kecil Anda!
Asumsikan input akan selalu n> = 3 .
Kue bulan juga mengandung salah satu dekorasi berikut :
- MF
- MAF
- HMF
- JCJ
- TTT
- ZJ
- LF
- RF
- CF
Yang mana, itu tidak masalah - selama itu berpusat secara vertikal dan horizontal .
Itu dapat ditulis secara vertikal atau horizontal juga!
Saya ingin variasi!
Jika Anda benar-benar akan membuat saya dua kue bulan yang sama, sebaiknya dekorasi berbeda!
Yaitu, beberapa eksekusi program Anda dengan input yang sama persis tidak selalu menghasilkan dekorasi yang sama .
Saya tidak sabar untuk memakan kue bulan Anda, jadi semakin cepat saya dapat menerimanya ( semakin pendek kode Anda ) semakin baik!
Semoga berhasil!
Bagi mereka yang bertanya-tanya tentang dekorasi:
Mereka adalah inisial dari semua nama alternatif untuk Festival Pertengahan Musim Gugur.
Daftar dapat ditemukan di halaman Wikipedia tertaut di bagian atas posting ini.
Klarifikasi:
Tidak ada aturan tentang memimpin dan mengikuti spasi .
Miliki sebanyak atau sesedikit yang Anda suka!
Dekorasi harus di tengah-tengah kue bulan Anda!
Pada dekorasi horisontal, ini berarti harus di garis tengah kue Anda, dan jumlah karakter di kiri dan kanan string dekorasi harus sama.
Pada dekorasi vertikal, ini berarti ia harus berada di kolom tengah kue Anda, dan jumlah karakter di atas dan di bawah dekorasi harus sama.
Tidak semua dekorasi harus digunakan!
Satu-satunya persyaratan adalah bahwa harus ada lebih dari satu kemungkinan untuk setiap input yang diberikan n . Kemungkinannya juga tidak perlu genap.
Fungsi dapat diterima.
MAF
dan tidakMF
? Saya tidak melihatA
opsi dekorasi Anda.Jawaban:
Pyth,
71655958 byteDisimpan 1 byte berkat @StevenH.
Cobalah online. Suite uji.
Padding begitu banyak.
sumber
?%Q2
dengan@,
(membalik urutan dua pilihan) ...Q
. Saya (ab) banyak menggunakan golf untuk menjawab Pyth saya sendiri.JavaScript ES6,
206196192188187180176169165156 byteKerusakan
Upaya pertama saya di kode-golf. Ini mungkin bisa lebih banyak golf.
disimpan 4 byte berkat @ETHProductions
Sunting Saya menggunakan kebebasan untuk memuaskan:
Date.now()%2
new Date%2
ini memungkinkan saya untuk menyimpan 7 byte lebih
+Math.random()>.5
menyimpan 4 byte lagi berkat @Arnauld
sumber
['MA','HA'][r]+'F'
bisa bermain golf'MH'[r]+'AF'
.[' R ',' C '][r]
dengan" ${'RC'[r]} "
, menggantikan masing-masing"
dengan backtick a.['MA','HM'][r]+'F'
sebenarnya dua byte lebih lama dari['MAF','HMF'][r]
;)' @'[+!s]
sebagai gantinya(s?' ':'@')
new Date%2
sebagai gantinyaDate.now()%2
.Pyth,
9979716864 bytePyth
sangat buruk, baik-baiksaja dalam membuat string. Atau mungkin aku semakinburukdalam bermain golf.Dapat membuat dekorasi
MAF
danHMF
horizontal, dan dekorasiMF
danCF
vertikal.Cobalah online!
sumber
Vim, 118 byte
Mengambil input sebagai buffer (mis. File dengan nomor n sebagai isinya).
Ini dia dengan karakter kontrol yang tidak patut dicetak dalam format xxd:
Cobalah online! (Ternyata, penerjemah V berfungsi dengan baik untuk kode Vim normal juga.)
Penjelasan
sumber
@a
ke standar1 ke arg1,@b
ke arg2, dll. Tetapi ini adalah fitur khusus V. Secara teknis ini tidak masalah sejak Anda memilikinya"aD
di awal, tetapi saya pikir saya akan menunjukkannya. 2) Anda bisa mengambil satu byte off jika Anda melakukandd@ap
bukannyaY@apdd
dd@ap
tidak bekerja dengan baik .dd@aP
berfungsi, tetapi kemudian membutuhkan tambahanj
dan tambahank
di telepon.PHP,
342292249185178176 bytesTelepon dengan
php -r '<code>' <size>
sejarah
Rev 1: versi awal; semua ukuran (termasuk kue kecil), semua dekorasi, semua kemungkinan arah
Wahyu 2: kue kecil yang dihapus (-36 bytes), opsi dekorasi yang direstrukturisasi, menghapus satu item dekorasi (-21) dan satu byte golf (-1).
Wahyu 3: Down to empat dekorasi; (-17), hanya horisontal untuk ukuran aneh (-18) plus golf kecil (-8).
Rev. 4: Terima kasih kepada Jörg karena bermain golf di bagian "kue cat"; ia melepas yang luar biasa (-31).
Lain -6 dengan golf tambahan saya, dan -27 untuk menggunakan string tunggal bukan array string.
Wahyu 5: -7 byte sebagian besar berkat Christallkeks
kerusakan
Ini semakin langsing dari jam ke jam. :)
sumber
for($i=0;$i<$n=$argv[1];$i++){$o[]=str_pad("(@",2*$n-1,!$i|$i==$n-1?"@":" ")."@)";}
!$i|$i==$n-1?"@":" "
; ternary tidak mau menerima milik Anda (di komputer saya), meskipun sudah benar.for(;$i<$n=$argv[1];)$o.=str_pad("(@",2*$n-1," @"[$i++%($n-1)==0])."@)\n";
Juga, sepertinya Anda mendapat "MAD" bermain golf deco Anda ;-)Java 7,
399349 byteVersi yang diperbarui dengan bantuan dari @Dodge dan @Kevin Cruijssen:
Coba di sini!
Versi baru ini jauh lebih dioptimalkan dan menyingkirkan
String
penanganan array. Juga seperti yang disarankan, hanya ada 4 dekorasi sekarang: 2 untuk input genap (MF
,ZJ
) dan 2 untuk input ganjil (MAF
,HMF
) yang digabungkan menjadi satuString
.Tidak Disatukan:
sumber
"MAF"
diulang?char[]
lebih efisien dan golf hal-hal lain lebih lanjut. @Cyoce Saya menggandakanMAF
karena saya memiliki semua dekorasi untuk input genap pada indeks0,2,4,6,8
dan semua dekorasi untuk input ganjil pada indeks1,3,5,7,9
. Itu membuatnya lebih mudah untuk menghitung indeks acak untuk input yang diberikan.Math.random()*5
memberikan nomor acak dari0-4
.*2
menyebar ke0,2,4,6,8
.+n%2
menambahkan1
untuk mendapatkan input aneh1,3,5,7,9
.Batch, 386 byte
Hanya akan menghasilkan HMF, MAF, MF atau CF yang sesuai. Catatan: garis-garis tertentu berakhir di ruang putih. Variabel:
n
Parameter input (baca dari STDIN)f
Awalan dekorasi (akhiranF
tersirat)o
Keanehann
(hanya digunakan satu kali, tetapiif
pernyataan tidak menerima ekspresi)l
Deretan karakter vertikal atas, atau0
untuk dekorasi horizontalu
Deretan karakter vertikal bawah, atau0
untuk dekorasi horisontalh
Deretan dekorasi horisontal (akan ditimpa oleh dekorasi vertikal)d
Indeks dekorasi dalam awalan dekorasi (0/1 untuk horizontal atau 1/3 untuk vertikal)c
Untaiann-3
ruangs
Output string untuk setiap baris%1
Nomor baris, tetapi atur jugan
untuk baris pertama, sehingga baris pertama dan terakhir menggunakan@
s bukan spasi.sumber
C, 233 Bytes
Harus bisa bermain golf ini sedikit dari sini ...
Tantangan besar, ini sulit dan jelek untuk dikodekan.
Jalankan dengan fungsi utama ini;
sumber
Ruby 2.3.1,
449265245233230 karakterSepertinya harus ada jawaban ruby, jadi inilah jawaban ruby. Ini benar-benar tidak sepintar itu, Semoga orang lain di sini akan lebih pintar;)
Versi golf:
Trik golf:
Versi yang mudah dibaca
Pengujian
sumber
Saya bosan ... berikut dua versi lagi:
PHP, 193 byte
port jawaban Lmis
PHP, 191 byte
mencetak karakter kue demi karakter dalam satu putaran tunggal
kerusakan
sumber
Python 3,
318301297285272 byteMerobohkan 17 byte dengan bantuan DJMcMayhem
Merobohkan 4 byte berkat mbomb007
Menurunkan 12 byte lagi berkat DJMcMayhem
Menjatuhkan 13 byte lagi berkat mbomb007
Golf pertama saya, jadi tidak terlalu bagus. Saya menggunakan: aliasing math.ceil as y dan str.format as z, format bersarang, impor baris tunggal, lambda, dan operasi bitwise ditambah beberapa hal lain untuk mendapatkan seperti ini.
Versi tidak dikunci (impor terpisah, tidak ada alias, dan tidak ada operasi bitwise):
Menariknya, menggunakan versi non-bitwise ini masih menghasilkan output yang benar, namun outputnya berbeda:
Non-Bitwise:
Bitwise:
sumber
from ... import*
mengetik impor untuk menghemat beberapa byteimport math;y=math.ceil
untuk melepas dua byte. Ini akan memberi Andaimport random;import math;y=math.ceil;lambda n:"{a}{}{a}".format("{d}(@{}{b}F{c}@)\n{e}".format(" "*(y((2*n-5)/2)),b=random.sample(["L","R"],1)[0],c=" "*((2*n)-(5+y((2*n-5)/2))),d="(@{}@)\n".format(" "*(2*n-3))*y((n-3)/2),e="(@{}@)\n".format(" "*(2*n-3))*(n-(3+(y((n-3)/2))))),a="({})\n".format("@"*(2*n-1)))
13 byte lebih pendek.format
karena Anda sering menyebutnya. Masalahnya adalah, saya tidak tahu persis bagaimana cara alias ke fungsi anggota (sepertistr.format
) sehingga Anda harus sedikit bereksperimen. Saya tidak yakin itu akan lebih pendek.C # 448 byte
Golf:
Uji di sini
Tidak Disatukan:
sumber