Deskripsi tugas:
Tulis program sesingkat mungkin untuk menggambar gradien radial dalam seni ASCII. Ukuran grid keluaran sudah ditentukan sebelumnya. Titik pusat dan karakter yang akan digunakan untuk gradien disediakan sebagai input ke program.
Gradien akan berukuran 70 × 25 sel karakter dengan spesifikasi berikut
- Sudut kiri atas grid memiliki koordinat (0, 0).
- Gradien, yang terdiri dari karakter yang disediakan, dipetakan ke dalam 35 unit panjang . Satuan panjang adalah tinggi satu karakter dan lebar dua karakter (karena
monospaced fonts
biasanya memiliki karakter dua kali lebih tinggi dari lebar). - Dalam 35 LU itu jarak saat ini dari titik pusat dikalikan dengan jumlah karakter gradien / 35 untuk mendapatkan indeks karakter untuk menggambar pada titik itu. Angka pecahan untuk indeks dibulatkan ke nol di sini. Satuan panjang harus dibiarkan sebagai bilangan real. (Tentu saja, jika hasilnya sama, implementasi tidak masalah.)
- Di luar 35 LU itu hanya karakter gradien terakhir yang muncul. Namun, sejak gradien terakhir »band« sudah mulai dalam 35 LU, karakter terakhir mulai muncul kurang dari 35 LU.
Memasukkan:
Input diberikan pada input standar dan terdiri dari tiga baris, masing-masing diakhiri oleh satu baris:
- The x koordinat titik pusat gradien
- The y koordinat titik pusat gradien
- Karakter yang digunakan untuk menggambar gradien. Itu mungkin termasuk spasi.
Keluaran:
Output adalah gradien seperti yang didefinisikan oleh aturan di atas pada output standar. Aliran kesalahan standar diabaikan. Setiap garis gradien diakhiri oleh satu baris. Tidak ada karakter lain kecuali yang ditentukan oleh input dapat terjadi.
Masukan sampel 1:
58
14
.:;+=xX$&
Output sampel 1:
&&$$$$$$$$XXXXXXXXxxxxxxxxx===========++++++++++++++++++++++++++++++++
&$$$$$$$$XXXXXXXXxxxxxxxxx=========+++++++++++++;;;;;;;;;;;;;;;;;;;;;+
$$$$$$$$XXXXXXXXxxxxxxxx=========+++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;
$$$$$$$XXXXXXXXxxxxxxxx========++++++++++;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
$$$$$$XXXXXXXXxxxxxxxx========+++++++++;;;;;;;;;;;;;:::::::::::::;;;;;
$$$$$XXXXXXXXxxxxxxxx=======+++++++++;;;;;;;;;;;:::::::::::::::::::::;
$$$$$XXXXXXXxxxxxxxx=======+++++++++;;;;;;;;;:::::::::::::::::::::::::
$$$$XXXXXXXXxxxxxxx=======++++++++;;;;;;;;;:::::::::::::::::::::::::::
$$$$XXXXXXXxxxxxxx========+++++++;;;;;;;;::::::::::...............::::
$$$XXXXXXXXxxxxxxx=======+++++++;;;;;;;;:::::::::...................::
$$$XXXXXXXxxxxxxx=======++++++++;;;;;;;::::::::.......................
$$$XXXXXXXxxxxxxx=======+++++++;;;;;;;::::::::......... ........
$$$XXXXXXXxxxxxxx=======+++++++;;;;;;;:::::::........ ......
$$$XXXXXXXxxxxxxx=======+++++++;;;;;;;:::::::....... .....
$$$XXXXXXXxxxxxxx=======+++++++;;;;;;;:::::::....... .....
$$$XXXXXXXxxxxxxx=======+++++++;;;;;;;:::::::....... .....
$$$XXXXXXXxxxxxxx=======+++++++;;;;;;;:::::::........ ......
$$$XXXXXXXxxxxxxx=======+++++++;;;;;;;::::::::......... ........
$$$XXXXXXXxxxxxxx=======++++++++;;;;;;;::::::::.......................
$$$XXXXXXXXxxxxxxx=======+++++++;;;;;;;;:::::::::...................::
$$$$XXXXXXXxxxxxxx========+++++++;;;;;;;;::::::::::...............::::
$$$$XXXXXXXXxxxxxxx=======++++++++;;;;;;;;;:::::::::::::::::::::::::::
$$$$$XXXXXXXxxxxxxxx=======+++++++++;;;;;;;;;:::::::::::::::::::::::::
$$$$$XXXXXXXXxxxxxxxx=======+++++++++;;;;;;;;;;;:::::::::::::::::::::;
$$$$$$XXXXXXXXxxxxxxxx========+++++++++;;;;;;;;;;;;;:::::::::::::;;;;;
Masukan sampel 2:
0
0
X.X.X.X
Output sampel 2:
XXXXXXXXXX..........XXXXXXXXXX..........XXXXXXXXXX..........XXXXXXXXXX
XXXXXXXXXX..........XXXXXXXXXX..........XXXXXXXXXX..........XXXXXXXXXX
XXXXXXXXXX..........XXXXXXXXXX..........XXXXXXXXXX..........XXXXXXXXXX
XXXXXXXX............XXXXXXXXXX..........XXXXXXXXXX..........XXXXXXXXXX
XXXXXX.............XXXXXXXXXX...........XXXXXXXXXX..........XXXXXXXXXX
..................XXXXXXXXXXX..........XXXXXXXXXX...........XXXXXXXXXX
................XXXXXXXXXXXX...........XXXXXXXXXX..........XXXXXXXXXXX
...............XXXXXXXXXXXX...........XXXXXXXXXX...........XXXXXXXXXXX
............XXXXXXXXXXXXXX...........XXXXXXXXXXX..........XXXXXXXXXXXX
.........XXXXXXXXXXXXXXX............XXXXXXXXXXX...........XXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXX............XXXXXXXXXXX...........XXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXX.............XXXXXXXXXXX...........XXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX..............XXXXXXXXXXXX...........XXXXXXXXXXXXXXX
XXXXXXXXXXXXXXX................XXXXXXXXXXXX............XXXXXXXXXXXXXXX
XXXXXXXXXXX..................XXXXXXXXXXXXX............XXXXXXXXXXXXXXXX
...........................XXXXXXXXXXXXX............XXXXXXXXXXXXXXXXXX
........................XXXXXXXXXXXXXXX............XXXXXXXXXXXXXXXXXXX
......................XXXXXXXXXXXXXXX.............XXXXXXXXXXXXXXXXXXXX
..................XXXXXXXXXXXXXXXXX.............XXXXXXXXXXXXXXXXXXXXXX
.............XXXXXXXXXXXXXXXXXXXX..............XXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...............XXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXX...............XXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX.................XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX...................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXX......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Masukan sampel 3:
70
25
.:+#
Keluaran sampel 3:
######################################################++++++++++++++++
#################################################+++++++++++++++++++++
#############################################+++++++++++++++++++++++++
##########################################++++++++++++++++++++++++++++
#######################################+++++++++++++++++++++++++++++++
####################################++++++++++++++++++++++++++++++++++
##################################++++++++++++++++++++++++++++++++++++
################################++++++++++++++++++++++++++++++++++++++
##############################++++++++++++++++++++++++++++++++::::::::
#############################+++++++++++++++++++++++++++::::::::::::::
###########################+++++++++++++++++++++++++::::::::::::::::::
##########################++++++++++++++++++++++++::::::::::::::::::::
#########################++++++++++++++++++++++:::::::::::::::::::::::
########################+++++++++++++++++++++:::::::::::::::::::::::::
#######################++++++++++++++++++++:::::::::::::::::::::::::::
######################++++++++++++++++++++::::::::::::::::::::::::::::
#####################+++++++++++++++++++::::::::::::::::::::::::::::::
####################+++++++++++++++++++::::::::::::::::::::::::.......
####################++++++++++++++++++::::::::::::::::::::::..........
###################+++++++++++++++++++::::::::::::::::::::............
###################++++++++++++++++++:::::::::::::::::::..............
###################+++++++++++++++++:::::::::::::::::::...............
##################++++++++++++++++++::::::::::::::::::................
##################++++++++++++++++++:::::::::::::::::.................
##################++++++++++++++++++:::::::::::::::::.................
Masukan sampel 4
59
1
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789<>|,.-#+!$%&/()=?*'_:;
Keluaran sampel 4
!+#-,|><87654210ZYWVUTRQPONLKJIHFEDCBzyxwutsrqonmlkjhgfedcbbbcdefghjkl
!+#-,|><87654210ZYWVUTRQPONLKJIHFEDCAzyxwutsrqonmljihgfdcba abcdfghijl
!+#-,|><87654210ZYWVUTRQPONLKJIHFEDCBzyxwutsrqonmlkjhgfedcbbbcdefghjkl
!+#-,|><97654310ZYXVUTSQPONMKJIHGEDCBAyxwvutrqponmkjihgffeedeeffghijkm
$+#-.|><98654320ZYXWUTSRQONMLKIHGFEDBAzyxwutsrqponmlkjihhggggghhijklmn
$!#-.,|<987643210YXWVUSRQPONLKJIHGEDCBAzywvutsrqponmllkjjjiiijjjkllmno
$!+#.,|><87654210ZYXVUTSRQONMLKJHGFEDCBAzywvutsrrqponnmmlllllllmmnnopq
%!+#-.|><987543210YXWVUTRQPONMLJIHGFEDCBAzyxwvutsrrqppooonnnnnoooppqrr
%$!+-.,|><87654310ZYXWVTSRQPONMLJIHGFEDCBAzyxxwvuttssrrqqqqqqqqqrrsstt
&%!+#-.,><987643210ZYXVUTSRQPONMLKJIHGFEDCBAzyyxwvvuutttssssssstttuuvv
&%$!+#.,|><986543210ZYWVUTSRQPONMLKJIHGFEDDCBAzzyyxwwwvvvuuuuuvvvwwwxy
/&%$!#-.,|><976543210ZYXVUTSRQPONMLKKJIHGFEEDCBBAAzzyyyxxxxxxxxxyyyzzA
(/&%!+#-.,|><876543210ZYXWVUTSRQPONMLKJJIHGGFEEDCCBBBAAAzzzzzzzAAABBBC
)(/%$!+#-.,|><876543210ZYXWVUTSRQPPONMLKKJIIHGGFFEEDDDCCCCCCCCCCCDDDEE
=)(&%$!+#-.,|><986543210ZYYXWVUTSRQPPONMMLKKJIIHHGGGFFFEEEEEEEEEFFFGGG
?=)(&%$!+#-.,|><9876543210ZYXWVVUTSRRQPOONMMLLKJJJIIIHHHHHHHHHHHHHIIIJ
*?=)(/%$!+#-.,|><98765432210ZYXWWVUTSSRQQPOONNMMLLLKKKJJJJJJJJJJJKKKLL
'*?=)(/&%$!+#-.,|><98765432110ZYXXWVUUTSSRRQPPOOONNNMMMMMLLLLLMMMMMNNN
_'*?=)(/&%$!+#-.,|><988765432210ZYYXWWVUUTTSSRRQQQPPPOOOOOOOOOOOOOPPPQ
:_'*?=)(/&%$!+##-.,|><9877654332100ZYYXXWVVUUTTTSSSRRRRQQQQQQQQQRRRRSS
;;:_'*?=)(/&%$!+#-.,,|><98876554322100ZZYYXXWWVVVUUUTTTTTTTTTTTTTTTUUU
;;;:_'*?=)(/&&%$!+#-.,,|><9987665443321100ZZYYYXXXWWWWVVVVVVVVVVVWWWWX
;;;;;:_'*?=)(/&%$$!+#-..,|>><9887665544322211000ZZZYYYYYYYYYYYYYYYYYZZ
;;;;;;:_'*??=)(/&%%$!+##-.,,|><<99877665544333222111100000000000001111
;;;;;;;;:_'*?==)(/&&%$!++#--.,,|>><<9887766655544433333322222223333334
Seminggu telah berlalu. Saatnya mengungkap panjang solusi dari kontes universitas kami:
167 - Python
189 - Haskell
203 - C
210 - VB.NET
219 - C
Dan solusi kami sendiri:
91 - GolfScript
125 - Ruby
157 - PowerShell
Jawaban:
Ruby 1.9,
116 114 108101 karaktersumber
Brainfuck - 1286
Ini adalah salah satu kreasi favorit saya. Termasuk fungsi root kuadrat yang berfungsi (untuk beberapa definisi yang berfungsi).
Outputnya sedikit mati karena kesalahan pembulatan, tetapi masih dapat dikenali. Floating point berada di luar level skill saya saat ini. Sayangnya ini hanya akan bekerja dengan sel 16 bit, yang berarti itu akan menjadi lambat anjing.
Output 1:
Output 2:
sumber
Python - 141 karakter
sumber
Delphi, 200 (dan 185)
Karena saya suka ascii-art di sini versi Delphi dari kode golf ini:
Tidak terlalu mengesankan karakter, karena saya harus menggunakan unit Math untuk menghubungkan di fungsi Min (). Juga, ReadLn () entah bagaimana tidak membaca bilangan bulat dan string dalam satu panggilan, jadi itu juga cukup mahal. Baris baru juga membutuhkan banyak karakter. Juga, Delphi membutuhkan cukup banyak ruang kosong di sekitar kata kunci itu. Tidak terlalu bangga dengan yang ini.
Bagaimanapun, output dari sampel 4 memberi saya:
Jika Anda akan menerima keluaran indentasi, versi ini sedikit lebih pendek dengan mengubah baris baru menjadi indentasi yang mengarah ke bungkus 80 karakter (mensimulasikan baris baru pada konsol standar 80x25):
(ini menghemat 15 karakter, dengan total 185 karakter). Output untuk "0 0 XXXX" adalah:
(Bisakah kamu melihat indentasinya ?! ;-))
sumber
APL (74)
Alasannya dibungkus dalam suatu fungsi adalah bahwa modifikasi untuk
⎕IO
tidak berlaku untuk seluruh sistem.Penjelasan:
L←⍴⊃C Y X⎕IO←⍞⎕⎕0
: Diatur⎕IO
ke0
(membuat array berbasis-0 dan bukan berbasis-1), atur X ke⎕
(baca baris pertama), atur Y ke⎕
(baca baris kedua), atur C ke⍞
(baca baris ketiga, tanpa format), dan atur L dengan panjang (⍴
) dariC
.25 70
: dimensi matriks.¨⍳⍵
: untuk setiap elemen dalam matriks di mana setiap elemen adalah koordinatnya sendiri ...⍵-Y X
: perbedaan antara titik saat ini dan titik tengah1 2÷⍨
: bagi koordinat X dengan 2 (karena char adalah setengah selebar tingginya).5*⍨+/2*⍨
: ambil akar kuadrat dari jumlah kuadrat35÷⍨
: bagi dengan 35⌊L⌊
: ambil minimum jumlah karakter dan nilai saat ini dan bulatkan ke bawah,/
: Nilai-nilai masih terbungkus dalam daftar (hanya satu elemen), dan ini akan membuat spasi dalam output, jadi 'bebaskan' nilai dari daftar mereka.C[
...]
: gunakan nilai yang kami temukan sebagai indeks ke dalam daftar karakter⎕←
: kita sekarang memiliki matriks di mana setiap elemen (x, y) adalah karakter untuk (x, y), jadi outputkan matriks.sumber
Perl 5.10, 103 karakter
sumber
Perl, 120 karakter
sumber
abs
apakah ada karena suatu alasan.$x,$y=<>,<>;
.Windows PowerShell, 157
Tidak ada yang penting. Sudah dipukuli sampai mati:
sumber
C, 176
Berikut terjemahan solusi Delphi saya ke C, menyimpan 24 karakter:
Anda dapat menguji kode ini di sini: http://www.ideone.com/oTvHt
sumber
main()
saya kira dan menyimpan tanda koma dengan cara itu.Common Lisp, 173 karakter
Satu-satunya trik nyata yang saya gunakan di sini adalah menggunakan
sebagai literal karakter baris baru
sumber
scala 223 (204 tanpa App-Wrapper)
Memiliki cols and rows (70, 25) yang diatur secara dinamis akan memungkinkan untuk gradien pengisian layar.
sumber
C # 311
Kupikir aku akan membuat program panjang untuk membuat yang lain merasa lebih baik:
Input diambil dari konsol, satu baris pada satu waktu (dua baris untuk koordinat dan satu untuk karakter gradien).
Terima kasih kepada Joey untuk tipsnya.
Contoh 1: http://ideone.com/X0jIZ
Contoh 2: http://ideone.com/RvICt
sumber
int
alih-alihfloat
, ekspresix-i
dany-j
menjadi tipeint
. Karena ini, `int Math.Abs (nilai int) akan dipanggil alih-alih float, yang menyebabkan hilangnya presisi. Saya sudah mencobanya dan mendapatkan sesuatu yang kasar: ideone.com/wQcMTint
s akan menghemat lebih banyak;)). Oh, dan*.5
harganya hanya satu char.