pengantar
Idenya adalah menggunakan karakter asterisk (bintang) *
untuk menampilkan bintang ascii-art pada dimensi yang ditentukan. Dimensi adalah angka input yang lebih besar dari atau sama dengan yang menentukan ketinggian dalam garis dari titik atas bintang. Bintang-bintang di sini dimaksudkan untuk menjadi bintang berujung enam dengan ukuran lebih besar yang terlihat lebih baik dari perspektif gambar.
Dalam semua kasus, representasi bintang seni ascii muncul sebagai dua segitiga yang tumpang tindih seperti yang ditunjukkan dalam contoh berikut.
Parametrik
Gambar dan tabel data berikut menjelaskan atribut untuk tujuh ukuran pertama bintang. Setiap parameter tumbuh dalam perkembangan aritmatika dengan meningkatnya , kecuali berbeda .
Contohnya
Untuk input 1 (kasus degenerasi) output program harus sebagai berikut:
*
*****
*****
*
Input 2:
*
***
*********
*******
*********
***
*
(3)
*
***
*****
***************
*************
***********
*************
***************
*****
***
*
(5)
*
***
*****
*******
*********
***************************
*************************
***********************
*********************
*******************
*********************
***********************
*************************
***************************
*********
*******
*****
***
*
Tantangan
Tugas Anda adalah membuat fungsi atau program yang akan menerima angka N sebagai input dan kemudian menampilkan bintang berukuran tepat menggunakan hanya karakter dan
*
karakter.
- Anda dapat mengasumsikan bahwa nilai input selalu berupa bilangan bulat positif.
- Trailing whitespace pada jalur output OK.
- Algoritma program harus cukup umum untuk setiap input untuk menghasilkan output seni bintang. Keterbatasan praktis ada tentu saja karena ukuran ukuran tampilan.
- Output harus dicetak ke STDOUT.
- Celah standar dilarang.
- Ini adalah kode-golf sehingga semua aturan main golf berlaku.
Mencetak gol
Ini adalah kode-golf sehingga kode dengan jumlah byte terpendek akan menang!
Jawaban:
05AB1E , 21 byte
Cobalah online! atau sebagai Test Suite
Penjelasan
sumber
3*s≠-L·<
suka6*s≠·-ÅÉ
atau≠3/-6*ÅÉ
, tapi sayangnya tidak ada yang lebih pendek .. Jawaban yang bagus, seperti biasa! :)xs3*<ŸRsLì'*×.º.C.∊
untuk 19 :). Saya berbohong, itu tidak berhasil untuk 1. Membiarkannya untuk inspirasi.Haskell , 114 byte
Membangun fungsi
g
yang mengambil angka dan menghasilkanIO
monad yang mencetak bintang ke STDOUT. Saya pikir ini baik-baik saja.Cobalah online!
Penjelasan
Pertama mari kita bicara tentang lambda.
Ini membutuhkan angka
n
,, untuk digambarkan sebagai bintang. Kami mencetak bintang dua kali lebih banyak dan kemudian 1 lebih banyak dan menempelkannya di kanan ke ukuran gambar. Kami menempelkan ini di kanan dengana
spasi untuk memusatkan garis bintang. Kita bisa menggunakan lambda ini untuk menggambar setiap baris.Dari lambda ini kita buat
(%)
.(%)
dimulai dengan melakukanmapM_
dengan lambda kami untuk mengubah profil menjadi bentuk.Sekarang yang perlu kita lakukan adalah membuat daftar profil untuk bintang. Kita bisa melakukan ini dengan membuat segitiga terlebih dahulu
[1..a]
, lalu melapisinya dengan nol++replicate b 0
. Jika kita mengambil profil segitiga dan membalikkannya, kita akan mendapatkan separuh bintang lainnya. Untuk memaksakan mereka, kami hanya membuat profil baru di mana setiap entri adalah maks dari dua segitiga. InizipWith max
.Kami kemudian menyebutnya dalam salah satu dari dua cara:
3%1
untuk input dari1
dan dengan(3*a-1)%a
sebaliknya.Dari sini kita melakukan sedikit mengutak-atik beberapa nilai untuk mencukur beberapa byte. Karena
3*a-1
agak lama kami mengimbangi beberapa nilai kami yang lain dengan 1 sehingga semuanya dibatalkan dan kami mendapatkan perilaku yang diinginkan3*a
. Yaitu kita mulai daftar kami di2
bukannya1
dan melakukan2*n-3
bukan2*n-1
untuk menebus perubahan.Versi alternatif, 114 byte
Yang ini membangun fungsi point-free
(%)<*>min 2
Cobalah online!
Cobalah online!
Cobalah online!
sumber
R ,
125107101 byteCobalah online!
Pendekatan sebelumnya (berbeda):
R ,
150148136135130128 byteCobalah online!
sumber
Python 2 ,
1019997 byteCobalah online!
-2 byte, terima kasih untuk Lynn
sumber
i+x>n*6or
simpan dua byte.i+x>~i/n/2%2*6*n
atau sesuatu sepertii+x>3*n*(~i/n&2)
(keduanya 96 byte).JavaScript (V8) ,
101108 byteEDIT: +7 byte untuk mencetak ke STDOUT
Cobalah online!
Berkomentar (tanpa
print
)sumber
Jelly , 21 byte
Program lengkap yang menerima bilangan bulat positif yang dicetak ke STDOUT.
Cobalah online! Atau lihat test-suite .
Bagaimana?
sumber
Kanvas ,
2523 byteCoba di sini!
15 byte tanpa penanganan
1
sumber
Jelly , 21 byte
Cobalah online!
Tautan monadik yang menerima integer tunggal sebagai argumen kirinya dan mengembalikan string Jelly yang dipisahkan dengan baris baru dengan bintang sebagai hasilnya. Saat dijalankan sebagai program lengkap, secara implisit mencetak bintang ke STDOUT.
Penjelasan
sumber
×3’»3
panjangnya sama ^ _ ^ɓ
tidak masalah tetapi saya menyimpannya karena saya masih menyukainya!Arang , 25 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Gambarlah segi lima yang tidak beraturan yang mewakili bagian kanan atas bintang, tetapi selubung khusus
1
untuk membuat baris kolom tambahan lebih lebar.Renungkan untuk melengkapi bintang.
Casing lebih istimewa membuat bintang untuk
1
baris lebih tinggi lebih tinggi.Solusi alternatif, juga 25 byte:
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Cetak ekstra
*
untuk kasing1
.Gambarlah setengah kiri segitiga dengan ukuran yang sesuai.
Refleksikan untuk melengkapi segitiga.
Tumpang tindih dengan pantulannya, kecuali dalam hal
1
, yang hanya mencerminkannya.14 byte tanpa casing khusus untuk
1
:Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Gambarlah segitiga dengan ukuran yang sesuai.
Tumpang tindih dengan pantulannya.
sumber
Perl 6 , 74 byte
Cobalah online!
Secara harfiah membuat segitiga dengan proporsi yang tepat dan tumpang tindih dengan salinan terbalik menggunakan string atau operator (
~|
). Output sebagai daftar garis dengan spasi spasi baris terdepan dan tertinggal.Penjelasan:
sumber
J ,
5350 byteCobalah online!
ungolfed
bagaimana
Gunakan tabel fungsi (seperti tabel waktu kelas 3) untuk membangun setengah segitiga dengan menggunakan
>:
(lebih besar atau sama) sebagai fungsi. Kemudian balikkan setiap baris, potong kolom terakhir, dan jahit kedua sisi bersamaan untuk mendapatkan segitiga penuh (tetapi terbuat dari 1 dan 0). Tambahkann
baris nol di bagian bawah. Akhirnya membalikkan semuanya, dan overlay pada yang asli, menggunakan boolean atau+.
untuk mendapatkan hasilnya. Kemudian putar 1 ke*
dan 0 ke spasi.sumber
T-SQL, 194 byte
@
adalah nilai input@c
menangani lebar segitiga atas@d
menangani lebar segitiga bawah@e
berisi output baik@c
atau@d
- ini menghemat beberapa byte@f
menangani kasus khusus 1 sebagai input.@c*@=3
menentukan kapan harus digunakan@f
. 5 byte lebih murah daripada menulis@c=3and @=1
Cobalah online
sumber
Japt
-R
, 25 byte+5 byte untuk
n=1
: \Cobalah
sumber