pengantar
Kita semua tahu S keren (juga dikenal sebagai Superman S, Stüssy S, Super S, Skater S, Pointy S, Graffiti S dll.): Miliaran anak sekolah di seluruh dunia menggambar S ini dan langsung merasa bangga dengan diri mereka sendiri. Jika Anda lupa atau memiliki masa kanak-kanak yang benar - benar tidak keren , berikut adalah gambar dari kata S cool:
Diberikan faktor skala n
sebagai input (di mana ), mengeluarkan Cool S dalam bidang ASCII.
Cara Menggambarnya
Dari halaman Wikipedia di Cool S:
Keluaran
Cool S saat n
= 1 adalah:
^
/ \
/ \
/ \
| | |
| | |
\ \ /
\ \/
/\ \
/ \ \
| | |
| | |
\ /
\ /
\ /
v
Dan untuk nilai yang berbeda n
, Anda cukup membuat output n
kali lebih besar. Misalnya, n
= 2:
^
/ \
/ \
/ \
/ \
/ \
| | |
| | |
| | |
| | |
\ \ /
\ \ /
\ \/
/\ \
/ \ \
/ \ \
| | |
| | |
| | |
| | |
\ /
\ /
\ /
\ /
\ /
v
Perhatikan bahwa bagian vertikal dua kali lebih panjang dan jarak antara garis vertikal dua kali lebih lebar.
Dan kapan n
= 3:
^
/ \
/ \
/ \
/ \
/ \
/ \
/ \
| | |
| | |
| | |
| | |
| | |
| | |
\ \ /
\ \ /
\ \ /
\ \/
/\ \
/ \ \
/ \ \
/ \ \
| | |
| | |
| | |
| | |
| | |
| | |
\ /
\ /
\ /
\ /
\ /
\ /
\ /
v
Catatan: Meskipun tidak diperlukan, kode Anda mungkin juga dapat mendukungn
= 0:
^
/ \
\\/
/\\
\ /
v
Kemenangan
Program terpendek dalam byte menang.
Λ
Jawaban:
Arang ,
58 53 47 4341 byteCobalah online!
Saya hanya ingin mencoba pendekatan lain, ini menarik luar melalui refleksi (terima kasih kepada Neil untuk memperluas ide) dan kemudian menggambar bagian dalam. Karena Arang memiliki
:Left
arah default untuk menggambar garis, saya menggunakan arah itu sebanyak mungkin untuk menghemat beberapa byte dengan menggambar S secara horizontal, seperti ini:Dan kemudian saya hanya perlu memutar kanvas 90 derajat berlawanan arah jarum jam.
sumber
Rotate
? Itu memberi saya ide ...Python 3 ,
255249248209 byte-6 byte terima kasih kepada Kevin Cruijssen
-1 byte terima kasih kepada Kevin Cruijssen
-39 byte terima kasih kepada Rod dan Jo King
Cobalah online!
Sekarang menangani n = 0.
sumber
o+~d
bisam-d
danrange(o)
bisarange(m+1)
, dan kemudian Anda dapat menghapuso=m+1\n
untuk menyimpan 6 byte. Jawaban yang bagus, +1 dari saya.p(s)\np(s[::-1])
kep(s+q+s[::-1])
: 248 byteprint
, dan lebih banyak 4 dengan menghapus[]
darijoin([...])
, total 238 byteq.join
dalam variabel untuk menyimpan byteq.join
, dan beberapa hal lainnyaArang ,
474241 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan: Gambarlah garis berikut secara berurutan:
Di mana
5
karakter string saat iniv^
. Di akhir loop pertama kursor kemudian diposisikan di titik9
. Seluruh kanvas kemudian diputar sehingga bagian lain dari Cool S dapat ditarik. (Kanvas sebenarnya diputar dua kali, tetapi ini hanyalah detail implementasi.)Arang tidak mendukung
RotateCopy(:Up, 4)
tetapi jika berhasil maka ini akan bekerja selama 33 byte:sumber
Kanvas ,
363229 byteCoba di sini!
Banyak manipulasi tumpukan. Penjelasan (kedaluwarsa):
sumber
Python 2 ,
227208207202196181 byteCobalah online!
Thks to Jo King untuk 1 byte; dan kemudian total 5 byte lainnya (via
n => 2*n
).Berfungsi untuk
n=0
juga.sumber
C (gcc) ,
379353344334 byteSaya menggunakan beberapa
#define
s untuk menghilangkan subekspresi dan beberapa global untuk berkomunikasi antara fungsi internal. Loop utama berjalan {0,1,2,3,3,2,1,0} untuk membangun S.Terima kasih kepada Jonathan Frech untuk sarannya.
Cobalah online!
sumber
w -r-1
mungkin bisa bermain golfw~r
.C (gcc) ,
260254 byte-6 bytes berkat ceilingcat .
Cobalah online!
Kehabisan
Kita dapat membagi bentuk menjadi beberapa bagian:
Setiap bagian dapat dijelaskan oleh sejumlah garis, tiga karakter, dan tiga hubungan dengan nilai-nilai tertentu yang menentukan lebar bidang di setiap baris.
Iterasi pertama muncul menjadi:
Panggilan ke
g()
makro terlihat sangat mirip sebuah tabel yang dapat dibangun dan dilingkarkan. Lebar bidang terkadang terkait dengan penghitung indeks, dan terkadang tidak. Kita dapat menggeneralisasi lebar bidang menjadiF * i + A
, di mana F adalah beberapa faktor untuk dikalikani
dengan, dan A adalah beberapa nilai untuk ditambahkan ke lebar. Jadi lebar terakhir dari panggilan keempat di atas adalah-2 * i + t
, misalnya.Demikian kita dapatkan:
Pada akhirnya itu tidak jauh lebih pendek dari versi yang diperketat dari
g()
panggilan, tetapi lebih pendek lebih pendek.sumber
Java, 435 byte
Fungsi itu sendiri membutuhkan 435 byte. Tentu saja ada ruang untuk perbaikan, "tingkat tinggi" dengan menganalisis aturan tentang di mana menempatkan karakter mana (pada akhirnya S adalah titik-simetris), dan "tingkat rendah", dengan bermain golf klasik (mungkin mengeluarkan variabel lain atau menggabungkan dua dari -
for
loop). Tapi ini adalah bidikan pertama dengan bahasa yang agak tidak menarik ini:sumber
t=...
sedikit lebih sedikit di mana ia akan menghemat byte. Jika Anda memiliki pertanyaan tentang perubahan yang saya buat, beri tahu saya. :)PHP ,
378374378377376335331328 byte-3 byte, terima kasih untuk manatwork
-4 byte, menggunakan str_pad bukan str_repeat
-41 byte, terima kasih atas saran manatworks
-1 byte, menggabungkan dua peningkatan menjadi + = 2
-1 byte, dihapus berlebihan \
-4 byte dengan menggema sekali.Lupa saya harus meneruskan string ke fungsi jadi ini lebih banyak byteBerfungsi untuk n = 0 juga.
Cobalah online!
sumber
'v'
di finalecho
.$i>0
dan$m>0
dapat ditulis hanya sebagai$i
dan$m
..
gabungan setelahnya menjadi,
. Cobalah online!Python 3 ,
321307 byteTerima kasih kepada @EsolangingFruit karena telah menghemat 14 byte
Cobalah online!
Python 2 , 303 byte
Cobalah online!
sumber
'\\','/'
di baris kedua dengan*'\/'
menyimpan tiga byte.print
input()
secara otomatiseval()
s string, sehingga Anda dapat melewatkanint()
panggilan juga.for l in L:print(*l,sep="")
(Saya tidak berpikir ada yang setara dalam Python 2).