Tujuan dari golf kode ini adalah untuk menggambar poligon reguler (satu dengan panjang sisi yang sama) dengan jumlah sisi dan jari-jari (jarak dari pusat ke puncak).
- Jumlah sisi dan jari-jari dapat dimasukkan melalui file, STDIN, atau hanya variabel lama biasa. Gunakan apa pun yang lebih pendek dalam bahasa Anda.
- -25% dari total karakter / byte jika gambar benar-benar diambil alih-alih ASCII art.
Jawaban:
LOGO 37 - 25% = 27,75 (dengan variabel)
LOGO 49 - 25% = 36,75 (sebagai fungsi)
Segi tiga
Disebut dengan variabel
Digunakan sebagai fungsi
P 100 3
Kotak
Disebut dengan variabel
Digunakan sebagai fungsi
P 100 4
Segi lima
Disebut dengan variabel
Digunakan sebagai fungsi
P 100 5
Decagon
Disebut dengan variabel
Digunakan sebagai fungsi
P 100 10
Lingkaran
Disebut dengan variabel
Digunakan sebagai fungsi
P 100 360
sumber
Mathematica, 40 - 25% = 30
sumber
Graphics
.Graphics@RegularPolygon
tidak diperbolehkan?Java 8:
533322 - 25% = 241,5Yah, itu Java: / Hanya menggambar garis, titik ke titik. Harus bekerja untuk poligon berukuran sewenang-wenang. Potong sedikit dari ukuran aslinya. Penghargaan besar untuk Vulcan (dalam komentar) untuk pelajaran golf.
Line Breaks:
Input adalah argumen [radius] [sisi]:
Keluaran:
sumber
java.awt.image.*
alih-alihjava.awt.image.BufferedImage
Short.valueOf
alih-alihInteger.valueOf
menyimpan empat byte, karena input tidak boleh melebihi kisaran celana pendek. 2)y[]=x.clone()
menyimpan lebih dari satu bytey[]=new int[s]
. 3) Gunakan yang sudah usangf.show();
alih-alihf.setVisible(1>0);
menyimpan tambahan sembilan byte. 4) Gunakan6.28
alih-alihMath.PI*2
, karena estimasi ini cukup akurat untuk tujuan ini, menghemat tiga byte. 5) DeklarasikanGraphics g
alih-alihGraphics2D g
saat membuat instance grafis untuk menyimpan dua byte.BufferedImage
danGraphics
sama sekali dan hanya membuang semuanyapaint()
). Itu memang mengubah warna gambar, meskipun masih terlihat bagus IMO. Terima kasih telah membuat saya melihat ini lagi :)Frame
sebagai variabel lokal, menghapusd
integer, dan menggunakan / menyalahgunakan for-loop untuk menyimpan beberapa karakter, terutama titik koma. Ini adalah versi dengan spasi putih juga.drawPolygon
bukandrawLine
. Versi spasi putih .TeX / TikZ (60 - 80.25)
File
polygon.tex
:(80 byte)
Jari-jari dan jumlah sisi disediakan sebagai variabel / makro
\r
dan\n
. Setiap unit TeX dapat diberikan untuk jari-jari. Tanpa unit, unit defaultcm
digunakan. Contoh:(16 byte tanpa nilai)
Jika nomor halaman harus ditekan, maka itu bisa dilakukan oleh
(11 byte)
Contoh untuk menghasilkan file PDF:
Skor:
Tidak jelas, apa yang perlu dihitung. Kisaran untuk skor adalah:
Kode dasar adalah 80 byte dikurangi 25% = 60
Atau semua inklusif (definisi variabel input, tidak ada nomor halaman): (80 + 16 + 11) minus 25% = 80,25
Jika koneksi antara titik pertama dan terakhir tidak perlu mulus, maka
--cycle
dapat dihapus, menghemat 7 byte.sumber
Geogebra , 42 - 25% = 31,5 byte
Jika Anda menghitung dalam karakter daripada byte, ini akan menjadi 41 - 25% = 30,75 karakter.
(Yaitu, jika Anda menganggap Geogebra sebagai bahasa ...)
Asumsikan jari-jari disimpan dalam variabel
r
dan jumlah sisi yang disimpan dalam variabels
.Ini menggunakan teorema cosinus c 2 = a 2 + b 2 - 2 ab cos C untuk menghitung panjang sisi dari jari-jari yang diberikan.
Output sampel untuk
s
= 7,r
= 5sumber
C:
229180(r adalah jari-jari incircle)
Silakan jalankan di terminal ANSI
Edit:
menyusun:
sumber
#include
s. Juga, Anda dapat mendeklarasikanv
sebagai global di luarmain
, dan mendeklarasikanu
sebagai parametermain
, maka Anda tidak perluint
(yaituv;main(u){//...
). Akhirnya, Anda dapat mengubahfor
loop terakhir menjadifor(j=0;j<s;)/*...*/x=j++-s/2.,//...
C, 359 Chars
Upaya pertama saya bermain golf. Setidaknya itu mengalahkan solusi Java ;-)
ungolfed:
Dan itu satu-satunya program yang mengeluarkan poligon di ASCII alih-alih menggambarnya. Karena ini dan beberapa masalah pembulatan floating point, output tidak terlihat sangat cantik (ASCII Chars tidak setinggi selebar).
sumber
int
dapat dihapus karena mereka diasumsikanint
oleh kompiler. Juga,for
loop terakhir dapat diubah kefor(j=0;j<r;){x=p+u*j;y=q+z*j++;//...
if(i<0)
bisa diubah menjadiif(i)
. Yang masih hanya diperlukan dalam satu iterasi, tetapi tidak bisa menemukan cara yang efisien untuk mengeluarkannya :(Mathematica, 54 * 75% = 40,5
Saya bahkan tidak berpikir ada gunanya untuk versi yang tidak serigala. Itu hanya akan berisi lebih banyak ruang putih.
Mengharapkan jari-jari dalam variabel
r
dan jumlah sisi dalam variabeln
. Jari-jari sedikit tidak berarti tanpa menampilkan sumbu, karena Mathematica menskala semua gambar agar sesuai.Contoh penggunaan:
sumber
Graphics@Polygon@Array[r{Sin@#,Cos@#}&,n+1,{0,2π}]
Array
.HTML / JavaScript:
215 - 25% = 161.25, 212 - 25% = 159Versi tidak disatukan:
sumber
i=S=5;
danfor(;i-->0;)
.i-->0
bagian itu? Itu sama dengani-- > 0
. Beberapa orang juga menyebutnya operator panah atau pergi ke operator ;)c=document.currentScript.parentNode;
dan penggantian karakter<canvas>
oleh<canvas id="c">
Postscript 156 - 25% = 117
Lewati jari-jari, jumlah sisi, dan titik tengah pada baris perintah
atau bergantung pada sumbernya
Menerjemahkan ke tengah, meningkatkan ke jari-jari, pindah ke (1,0); lalu ulangi n kali: putar 360 / n, tarik garis ke (1,0); menggambar garis akhir, usap dan keluarkan halaman.
sumber
Sage , 44 - 25% = 33
Mengasumsikan jumlah sisi disimpan dalam
s
variabel dan jari-jari disimpan dalamr
variabel.Output sampel:
s
= 5,r
= 3s
= 5,r
= 6s
= 12,r
= 5sumber
regular_polygon
fungsi selalu menghasilkan poligon dengan simpul pertama di (0,1). Sebuah perbaikan adalah dengan tidak menunjukkan sumbu dengan 7 byte tambahan (,axes=0
setelahfigsize=r
)bc + ImageMagick + xview + bash, 104,25 (139 byte - 25%)
Tantangan ini tidak akan lengkap tanpa jawaban ImageMagick ...
Misalnya,
./polygon.sh 8 100
buat gambar ini:sumber
JavaScript 584 (867 tidak bercak)
Kode ini menggunakan N Complex Roots of unity dan menerjemahkan sudut ke X, poin Y. Kemudian asal dipindahkan ke pusat kanvas.
Golf
Output sampel:
Tidak disatukan
Kode ini membutuhkan elemen kanvas HTML5, c adalah objek kanvas, r adalah jari-jari dan n adalah # sisi.
sumber
PHP 140 - 25% = 105
Mengasumsikan dua variabel yang telah ditentukan:
$p
jumlah titik, dan$r
jari-jari dalam piksel. Atau, seseorang bisa menambahkanlist(,$r,$p)=$argv;
dan menggunakan argumen baris perintah sebagai gantinya. Output akan menjadi png, yang harus disalurkan ke file.Keluaran
$r=100; $p=5;
$r=100; $p=6;
$r=100; $p=7;
$r=100; $p=50;
sumber
TI-80 BASIC, 25 byte - 25% = 18.75
Mengasumsikan semua pengaturan diatur ke nilai default. Jalankan program seperti
5:PRGM_POLYGON
(untuk pentagon)Ini bekerja dengan menggambar lingkaran dengan jumlah langkah yang sangat rendah. Misalnya, pentagon memiliki langkah 2π / 5 radian.
Pengaturan jendela yang cukup baik secara default, dan
TMIN
danTMAX
ditetapkan untuk0
dan2π
, sehingga semua kita perlu perubahan adalahTSTEP
.sumber
SmileBASIC 3,
183159 - 25% = 119,25 byteMengambil sisi dan jari-jari dari
INPUT
, menghitung dan menyimpan poin, dan kemudian menariknya dengan menggunakanGLINE
.Saya merasa ini bisa lebih pendek tapi seperti jam 1 pagi.Mengasumsikan env tampilan bersih dan default, jadi Anda mungkin perluACLS
ketika menjalankannya dari DIRECT.sumber
OpenSCAD: 31 kurang 25% = 23,25
Posting pertama di sini! Aku tahu aku terlambat ke pesta, tapi sepertinya ini pertanyaan yang bagus. Panggilan menggunakan
p(n,r)
.sumber
ActionScript 1, Flash Player 6: 92 - 25% = 69
sumber
C # di LINQPAD
Penghargaan untuk bagian matematika diberikan kepada Geobits (saya harap Anda tidak keberatan!) Dengan jawaban Java. Saya putus asa dalam matematika :)
Saya melakukan ini di LINQPAD karena punya jendela keluaran bawaan. Jadi pada dasarnya Anda dapat menarik dan melepas yang berikut ke dalamnya dan itu akan menggambar poligon. Alihkan saja ke 'C # Program', dan impor lib System.Drawing ke properti kueri.
sumber
Matlab 58 byte - 25% = 43,5
Tidak melihat solusi Matlab, jadi di sini ada satu yang cukup mudah:
Anda dapat memotong beberapa byte jika r dan n sudah ada di ruang kerja.
Contoh panggilan:
sumber
Python 2, 222 byte
Periksa apakah sebuah piksel berada di sisi dalam semua hyperplanes (garis) poligon. Jari-jari tersentuh karena sebenarnya apothem digunakan.
sumber
Mathematica 27 (= 36 - 25%)
Ketika kita mengirimkan kode Mathematica kita sering lupa tentang fungsi-fungsi baru yang terus dibangun ke dalam bahasa, dengan kosakata bahasa saat ini mengumpulkan sekitar 5000 fungsi inti . Kosakata bahasa yang luas dan meluas sangat berguna untuk bermain golf kode. CirclePoints diperkenalkan di versi saat ini 11.X. Contoh spesifik jari-jari 7-sisi 5 adalah:
Anda juga hanya perlu memasukkan parameter sudut untuk mengontrol orientasi poligon Anda:
sumber
Python 2, 74 byte - 25% = 55,5
Input ada dalam variabel
r,n
. Jika dimasukkan dalam hitungan, itu akan menjadir,n=input()
, selama 12 byte lebih.Cobalah online - (menggunakan kode yang berbeda karena
exec
tidak diterapkan dalam juru bahasa online)sumber
SmileBASIC,
8575 - 25% = 56,25 byteVariabel S dan R digunakan untuk input.
Dijelaskan:
Sisi-sisinya digambar menggunakan warna
-I
, yang biasanya mendekati -1 (& HFFFFFFFF putih) (kecuali bilaI
0, bila transparan).Anda juga bisa menggambar poligon terisi dengan menggunakan
GTRI N,M,X,Y,R,R,-I
alih-alihGLINE...
sumber
Tikz, 199 byte
Solusi ini menggunakan perpustakaan tikz
shapes.geometric
.Inilah poligon dengan
5
sisi dan jari-jari8in
terlihat ketika dilihat di evince .sumber