Kami memiliki taman 10x10 meter persegi di luar rumah kami. Kami ingin menanam rumput dan membuat teras. Kami telah memutuskan bagaimana membagi kebun, tetapi kami belum memutuskan rasio antara jumlah rumput dan teras.
Kami butuh bantuan memvisualisasikannya, dan ASCII-art jelas merupakan cara terbaik untuk melakukannya.
Tantangan:
Ambil bilangan bulat dalam rentang inklusif [0, 100] (atau desimal opsional [0, 1]) yang mewakili berapa persen dari taman yang seharusnya teras.
Teras seluas satu meter persegi akan diwakili oleh tanda hubung -
atau bar |
. Satu meter persegi rumput akan diwakili oleh tanda pagar #
.
- Jika jumlah teras kurang dari atau sama dengan 50%, maka taman harus ditutup dengan jeruji, mulai dari sudut kiri bawah, dan isi secara vertikal, kemudian secara horizontal.
- Jika jumlah teras lebih dari 50%, maka kami ingin penghiasan menjadi sebaliknya (strip bukan bar), dan mulai di sudut kiri bawah, dan isi secara horizontal, kemudian secara vertikal.
Contoh:
N = 25%
||########
||########
||########
||########
||########
|||#######
|||#######
|||#######
|||#######
|||#######
N = 75%
##########
##########
-----#####
----------
----------
----------
----------
----------
----------
----------
N = 47%
||||######
||||######
||||######
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
N = 50%
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
|||||#####
N = 51%
##########
##########
##########
##########
-#########
----------
----------
----------
----------
----------
N = 0%
##########
##########
##########
##########
##########
##########
##########
##########
##########
##########
N = 100%
----------
----------
----------
----------
----------
----------
----------
----------
----------
----------
Ini adalah kode-golf sehingga kode terpendek dalam byte menang. Aturan standar tentang I / O. Ini adalah ASCII-art, jadi outputnya harus seperti contoh di atas. Yaitu keluaran ["|", "|" ...]
tidak OK.
Penjelasan didorong seperti biasa :)
Jawaban:
APL (Dyalog) , 34 byte
Fungsi awalan anonim mengharapkan bilangan bulat di kisaran 0-100. Diasumsikan
⎕IO
( I ndex O rigin)0
, yang merupakan default pada banyak sistem.Cobalah online!
{
...}
lambda;⍵
adalah argumen:'#-|[
...]
mengindeks string dengan array berikut:50≥⍵
1 jika 50 lebih besar dari atau sama dengan argumen, kalau tidak 0s←
store in s (for s mall)1+
kenaikan⍵⍴
siklis r eshape argumen-panjang100↑
ambil seratus pertama itu, padding dengan nol10 10⍴
r eshape menjadi sepuluh baris dan sepuluh kolom⊢
hasilkan itu (terpisahs
dari10 10
)⍉⍣s
transpos jika kecil⊖
flip terbaliksumber
{⊖⍉⍣c⊢10 10⍴(⍵/'-|'⊃⍨c←⍵≤50),100/'#'}
99/'#'
⍴
J ,
39, 3837 byteBagaimana itu bekerja:
Cobalah online!
sumber
{.
dengan argumen over the bounds adalah trik yang bagus.(]|.@|:_10{&'#|-'\100{.1+$)>&50
_100{.
yang mengisi awal, tapi kemudian saya perlu membalik setiap baris, jadi saya menyerah.JavaScript (ES6), 84 byte
Mengambil input sebagai integer dalam [0 ... 100] .
Uji kasus
Tampilkan cuplikan kode
Diformat dan dikomentari
sumber
Python 2 ,
121117116 byteCobalah online!
sumber
[i*10:-~i*10]
bisa[i*10:][:10]
.Jelly , 23 byte
Cobalah online!
Ubah nomor sebelum
Ç
di footer untuk mengubah input. Berfungsi sebagai tautan monadik dalam suatu program tanpa argumen baris perintah, yang diizinkan .sumber
ȷ2
->³
)Prolog SWI, 249 byte
Solusinya cukup mudah. Prosedur
a
membuat baris,l
menulis karakter ke kolom dalam satu baris danr
memutuskan karakter apa yang harus dicetak.sumber
G<51
harus bekerjaG<=50
.MATL , 26 byte
Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
sumber
Python 2 , 85 byte
Cobalah online!
Dalam kedua kasus, setiap baris diisi di sebelah kanan dengan
#
panjang 10, yang memungkinkan kami berbagi kode di antara dua kasus tersebut. Angka 10 digunakan cukup sering sehingga aliasingT=10
menghemat jumlah byte yang layak.sumber
51
dan sesudahnya, ia melewatkan satu baris.Ruby ,
9282 byteCobalah online!
Bagaimana itu bekerja:
Setiap sel dalam kisi memiliki angka progresif mulai dari sudut kiri bawah dan berjalan secara horizontal atau vertikal tergantung pada nilai n:
Jika
n>50
, angkanya100-y*10+x
sebaliknyax*10+9-y
sumber
Arang , 25 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
sumber
Sekam , 24 byte
Cobalah online!
Penjelasan
sumber
SOGL V0.12 , 21 byte
Coba Di Sini!
Penjelasan:
sumber
dc ,
210197 byteCobalah online!
sumber
APL (Dyalog Classic) , 33 byte
Cobalah online!
berdasarkan jawaban Adám
⎕d
adalah string'0123456789'
∘.,
Produk Cartesian⍨
dengan dirinya sendiri⍎¨
mengevaluasi masing-masing - dapatkan 10x10 matriks 0,99⍵>
matriks boolean untuk tempat argumen⍵
lebih besar⊢
bertindak sebagai pemisah(⍉+⍨)⍣(⍵≤50)
jika ⍵≤50 gandakan matriks (+
dengan sendirinya) dan transpos (⍉
)⊖
membalikkan vertikal'#-|'[ ]
indeks string'#-|'
dengan setiap elemen dari matrikssumber
q , 51 byte
sumber
Retina ,
7262 byteCobalah online! Tautan termasuk kasus uji. Sunting: Disimpan 10 byte dengan bantuan dari @MartinEnder. Penjelasan:
Ulangi
|
beberapa kaliTetapi jika inputnya setidaknya 51, ubah ke
-
s.Tambahkan 100
#
s.Dibagi menjadi 10 kelompok yang terdiri dari 10, membuang apa pun yang tersisa.
Jika inputnya minimal 51, transpos hasilnya.
Sortir hasilnya.
Solusi alternatif, juga 62 byte:
Penyortiran sebelum transposing memungkinkan penghematan byte pada kondisi untuk transposisi tetapi biaya satu byte untuk mendapatkan hasil dalam urutan yang benar.
sumber
#
padaO
tahap pertama , karena$.%`
akan paling banyak9
. Anda juga dapat menyimpan beberapa byte dengan menghindari loop dengan mengorbankan tahap pengurutan lainnya di akhir, seperti ini: tio.run / ##K0otycxL/... Mungkin bahkan ada cara yang lebih pendek untuk mengatur ulang hasilM
tahap itu ke dalam bentuk akhir. .O
panggung polos ke kanan setelahM
panggung, sehingga Anda dapat terus menggunakan lookahead bukannya lookbehind.Python 2 ,
106103 byteCobalah online!
sumber
PHP, 119 +1 byte
Jalankan sebagai pipa dengan
-nR
atau coba online .sumber
Jelly , 24 byte
Cobalah online!
Bagaimana itu bekerja
Saya menggunakan terlalu banyak superskrip ...
sumber
R , 102 byte
Cobalah online!
Membaca
n
dari stdin dan mencetak taman ke stdout.Penjelasan:
sumber