Dalam episode AAOD hari ini, kita akan membangun Kuil Cina dengan ketinggian yang bervariasi.
Pertimbangkan contoh berikut untuk tinggi ( N
) 1
hingga6
N = 1
:
.
|
. ]#[ .
\_______/
. ]###[ .
\__]#.-.#[__/
|___| |___|
|___|_|___|
####/_\####
|___|
/_____\
N = 2
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\___]#.---.#[___/
|__|_| |_|__|
|__|_|___|_|__|
#####/___\#####
|_____|
/_______\
N = 3
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\_______________/
. ]#######[ .
\____]#.-----.#[____/
|__|__| |__|__|
|__|__|_____|__|__|
######/_____\######
|_______|
/_________\
N = 4
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\_______________/
. ]#######[ .
\___________________/
. ]#########[ .
\_____]##.-----.##[_____/
|__|__|_| |_|__|__|
|__|__|_|_____|_|__|__|
########/_____\########
|_______|
/_________\
N = 5
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\_______________/
. ]#######[ .
\___________________/
. ]#########[ .
\_______________________/
. ]###########[ .
\______]###.-----.###[______/
|__|__|___| |___|__|__|
|__|__|___|_____|___|__|__|
##########/_____\##########
|_______|
/_________\
N = 6
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\_______________/
. ]#######[ .
\___________________/
. ]#########[ .
\_______________________/
. ]###########[ .
\___________________________/
. ]#############[ .
\_______]####.-----.####[_______/
|__|__|__|__| |__|__|__|__|
|__|__|__|__|_____|__|__|__|__|
############/_____\############
|_______|
/_________\
dan seterusnya.
Detail Konstruksi
Saya yakin sebagian besar detail tentang polanya jelas. Berikut adalah beberapa detail yang lebih baik:
- Pintu di bagian bawah kuil setidaknya dapat memiliki
1
_
lebar dan maksimum menjadi5
_
lebar. - Akan selalu ada dua
.
tepat di atas pilar di sekitar pintu (dua vertikal|
). - Tangga dimulai dengan lebar yang sama dengan pintu dan meningkat seperti yang ditunjukkan dalam pola
- The
]##..##[
blok di atas masing-masing tingkat atap peningkatan ukuran2
dari atas ke bawah. - Tingkat
\__...__/
atap meningkat dalam ukuran4
dari atas ke bawah. - Blok dinding di sekitar pintu minimal harus berisi
1
_
dan maksimum, di3
_
antara keduanya|
. Prioritas masuk ke blok dinding luar sehingga yang paling dekat dengan pintu mendapatkan ukuran yang bervariasi untuk setiap tingkat. - Ruang antara
.
dan]
(atau[
) diisi oleh#
di atap tepat di atas pintu.
Detail Tantangan
- Tulis fungsi atau program lengkap yang membaca bilangan bulat positif lebih besar daripada
0
melalui argumen STDIN / ARGV / fungsi atau setara terdekat dan keluaran (ke STDOUT atau setara terdekat) theN
Chinese Shrine - Mengejar baris baru adalah opsional.
- Seharusnya tidak ada ruang trailing atau ruang trailing yang cukup untuk mengisi output dalam persegi panjang batas minimum.
- Seharusnya tidak ada ruang utama yang bukan bagian dari pola.
Papan peringkat
Posting pertama dari seri menghasilkan leaderboard.
Untuk memastikan jawaban Anda muncul, mulailah setiap jawaban dengan tajuk utama, menggunakan templat Penurunan harga berikut:
# Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda bisa menyimpan skor lama di headline, dengan mencoretnya. Contohnya:
# Ruby, <s>104</s> <s>101</s> 96 bytes
N=1
kasus ini? Mengapa tidak 3 dan memiliki jendela samping yang lebih kecil seperti dalamN=2
kasing?N=1
ini, bukankah atap pertama terlalu panjang (lebar)?#
di samping.
untuk mendukung]
dan[
di atasnya. Tentang ukuran atap awal - Itulah ukuran atap di setiap atap bagian atas.Jawaban:
CJam, 200 byte
Baris baru ditambahkan untuk menghindari pengguliran. Cobalah online
Penjelasan singkat:
Program membangun separuh kiri kuil (termasuk tengah), lalu membalikkannya dan menggantikan beberapa karakter untuk mendapatkan setengah yang tepat. Serangkaian n spasi direpresentasikan sebagai angka ~ n (bitwise "not") selama konstruksi, dan diganti dengan spasi aktual di akhir.
Program ini dimulai dengan 2 baris teratas, kemudian untuk setiap tingkat atap, program ini menambahkan semua baris sebelumnya dengan 2 spasi dan menambahkan atap baru (2 baris). Atap terakhir dimodifikasi untuk menambahkan bagian "pintu atas".
Selanjutnya, dinding atas dibangun dengan mengulangi "| __" dan memotong pada panjang yang tepat, diikuti oleh "_ |" yang telah diperbaiki. dan spasi. Dinding kemudian digandakan dan ruang pintu diganti dengan garis bawah. Akhirnya, bagian bawah dibangun garis demi garis.
sumber
Perl,
332 316294Coba saya .
C, 371
Coba saya .
JavaScript, 365
Di atas dapat diterjemahkan hampir 1 ke 1 ke dalam JavaScript:
Menggunakan:
sumber
s
. Kecuali Anda mengalokasikannya secara dinamis, tentu saja.Python 2,
356352347344 byteIni pada dasarnya membangun garis kuil demi baris. Fungsi
p
mencetak string dengan spasi yang dibutuhkan untuk memusatkannya.Saya menggunakan python 2 untuk menyimpan banyak byte, karena objek peta python 3 tidak memicu. Saya kira saya harus selalu golf di python 2 , hanya menghemat beberapa byte lagi (bahkan jika itu hanya untuk tidak perlu menguraikan input ke int). Hehehe, ini tidak seperti kode cantik untuk bermain golf.
Edit: dan tentu saja, sekarang saya tidak membutuhkan peta lagi ...
Berikut kode dalam bentuk ungolfed:
sumber
print(B*(5+2*n-len(s)//2)+s)
menjadiprint B*(5+2*n-len(s)/2)+s
(menghapus tanda kurung dan mengubahnya//
menjadi/
).print B*(5+2*n-len(s)/2)+s
keprint(5+2*n-len(s)/2)*B+s
, Anda dapat menghapus spasi setelahnyaprint
.JavaScript ( ES6 ), 440
Edit bug lintel yang diperbaiki
Sebuah fungsi dengan tinggi sebagai parameter, output ke konsol.
Menggunakan string template banyak , semua baris baru signifikan dan dihitung.
Jalankan cuplikan untuk menguji di Firefox (dengan output konsol)
Versi ungolfed untuk uji interaktif:
sumber
Haskell, 473 byte
sumber
#
C, 660 byte
Pola ini sepertinya terlalu tidak teratur untuk menghasilkan sesuatu yang mewah, terutama dalam bahasa tanpa pemrosesan string. Jadi inilah pendekatan brute force saya:
Sebelum bermain golf:
Tidak banyak yang bisa dijelaskan di sini. Itu hanya berjalan baris demi baris, dan menghasilkan hitungan yang diperlukan dari setiap karakter. Saya mencoba untuk menjaga kode itu sendiri tetap ringkas, tetapi masih bertambah.
d
adalah lebar pintu,w
lebar setiap dinding bata.sumber
c(char*s){for(;*s;)putchar(*s++);}
==>#define c printf
;r(n,c){for(j=0;j++<n;)putchar(c);}
==>r(n,C){while(n--)putchar(C);}