Gambarlah garis di antara setiap pasangan titik berbeda untuk n
titik - titik yang diatur dalam lingkaran, menghasilkan sesuatu seperti hasil di bawah ini. Kode terpendek (dalam byte) menang! Garis Anda tidak harus transparan, tetapi terlihat lebih baik seperti itu. Outputnya harus berupa grafik vektor, atau menjadi gambar setidaknya 600 piksel dengan 600 piksel (baik disimpan ke file atau ditampilkan di layar). Untuk menyelesaikan tantangan, Anda harus menggambar setidaknya 20.
code-golf
kolmogorov-complexity
graphical-output
J. Antonio Perez
sumber
sumber
n
dan menggambar garis untukn
poin.n
akan menambah banyak tantangan karena saya mengharapkan sebagian besar solusi untuk bekerja dengan nomor berapa pun, terutama karena 37 aneh dan karenanya tidak ada simetri cermin.n
sebagai masukan atau hanya memilih yang sewenang-wenangn
lebih dari 20?Jawaban:
Mathematica, 13 byte
Sepertinya ini hanya gagal memberikan penyematan melingkar
n=4
, tetapi pertanyaannya menyatakann>=20
sumber
n
(saya punya jawaban siap dari 37 diperbaiki) :(MATL ,
1614 byteKarena saya tidak terlalu fasih dengan MATL saya berharap ini agak lebih golf. (Akan lebih baik untuk setidaknya mengalahkan Mathematica :-) Yaitu flip
w
tidak optimal, mungkin bisa dihindari ...Uji Online! (Terima kasih @Suever untuk layanan ini, terima kasih @DrMcMoylex untuk -2 byte.)
Penjelasan (untuk
N=3
):Perlu dicatat bahwa untuk menghasilkan akar ke-N kesatuan Anda dapat menggunakan rumus
exp(2*pi*i*k/N)
untukk=1,2,3,...,N
. Tapi karenaexp(pi*i/2) = i
Anda juga bisa menulisi^(4*k/N)
untukk=1,2,3,...,N
apa yang saya lakukan di sini.sumber
XH:H
ke:G
G
terima kasih banyak!PICO-8 , 131 byte
Saya tidak begitu yakin apakah saya akan melanggar aturan, tapi saya tetap melakukannya!
Golf
Tidak disatukan
PICO-8 adalah konsol fantasi berbasis Lua dengan resolusi asli 128x128. Saya membuat lingkaran sebesar yang saya bisa ...
sumber
Mathematica, 42 byte
Buat satu set 37 poin yang diatur dalam lingkaran, dan kemudian buat garis di antara semua himpunan bagian yang mungkin dari dua titik. Seseorang memposting jawaban yang lebih pendek yang mengambil keuntungan dari CompleteGraph, tapi saya percaya ini adalah yang terpendek selain dari mereka yang mengandalkan CompleteGraph.
sumber
Tuple
. Anda juga perlu memperbarui ini untuk menerima sewenang-wenangn
, tetapi mudah tidak akan dikenakan biaya byte.Tuples
HTML + JS (ES6), 34 +
177164162 = 196 byteMenggunakan HTML5 Canvas API .
Lihat di CodePen .
-13 byte : Dihapus
closePath()
, dipindahkan kestroke()
dalambeginPath()
-2 bytes : Defined variable
a
insiderotate()
sumber
Java,
346338322301 BytesSolusi ini berfungsi untuk semua
n>1
, meskipun posting asli tidak mensyaratkan itu, itu benar.Favorit saya adalah
n=5
, jangan tanya kenapa, juga, jika Anda ingin GUI yang lebih dingin, gunakan:int a=Math.min(this.getHeight(),this.getWidth())/2;
Di tempat 300 hard-coded, itu akan menggunakan lebar atau tinggi bingkai sebagai diameter.
Disimpan 8 byte berkat Shooqie. Disimpan 21 byte berkat Geobits.
Output untuk
n=37
:sumber
Frame x=
danfinal
(saya pikir?)Frame x
berasal dari solusi lain yang melibatkan utas. Anda memerlukan final karena ini adalah referensi kelas internal ke variabel eksternal di kelas pemilik.int
deklarasi di luarfor
loopPython 2,
258235229 BytesOutput untuk
n=37
sumber
from PIL import*
pendek?import *
, tergantung bagaimana Anda menginstalnya, Anda bisa melewatkan PIL dan mengimpor Image / ImageDraw secara langsungOktaf,
8869 byteOutput untuk
N=37
:Output untuk
N=19
:sumber
gplot
juga, tapi aku tidak berhasil membuatnya cukup pendek ...Perl, 229 byte
Ini menggunakan rumus yang sama seperti kebanyakan bahasa yang tidak memiliki builtin nyaman untuk tantangan ini (bahkan jika saya tidak melihat mereka untuk menemukannya, tapi itu rumus yang cukup mudah ditemukan). Jadi tidak terlalu menarik, tetapi biasanya tidak ada banyak jawaban Perl untuk tantangan semacam ini, jadi saya hanya ingin mengusulkan satu.
Dan Anda akan membutuhkan
-MImager
(9 byte),-MMath::Trig
(menyediakanpi
, 13 byte), dan-n
(1 byte) ==> 23 byte.Untuk menjalankannya:
Itu akan membuat file bernama
t.png
yang berisi gambar.Anda harus menginstalnya
Imager
, tetapi jangan khawatir, ini cukup mudah:(Itu
echo
S akan mengonfigurasi Anda cpan jika Anda belum pernah menggunakannya sebelumnya (sebenarnya itu hanya akan bekerja jika perl Anda cukup baru, saya pikir untuk sebagian besar dari Anda akan, dan saya minta maaf untuk yang lain!)) .Dan versi yang lebih mudah dibaca (ya, itu cukup mudah dibaca untuk skrip Perl!):
-1 byte terima kasih kepada Titus.
sumber
for
loop, maka ya, itu wajib.y2
. Saya yakin Anda tidak membutuhkannya. Dan bisakah Anda menulis ke STDOUT?GeoGebra , 92 byte
Setiap baris dimasukkan secara terpisah ke bilah masukan. Berikut adalah gif yang menunjukkan eksekusi:
Bagaimana itu bekerja
The
polygon
Perintah menciptakan poligon 20 sisi, dengan simpul dari baseline di(0,0)
dan(1,0)
. Perintah selanjutnya kemudian mengulangi setiap titik dari poligon dengan indeksi
, menggunakansequence
danvertex
perintah, dan untuk setiap titik dengan indeksi
, menggambar segmen garis ke setiap titik lainnya dengan indeksj
menggunakansegment
perintah.sumber
PHP,
186184196 bytemenulis gambar ke STDOUT
kerusakan
-12 byte untuk diperbaiki
n=20
Ganti
$p=2*M_PI
dengan6
(-8),/=$argv[1]
dengan=M_PI/10
(-2), dan$b>0
dengan$b
(-2)Menggunakan tepat PI / 10 tidak sakit. Dengan
.3142
, kesalahan pembulatan dari versi parametrized tetap, tetapi denganM_PI/10
mereka lenyap dan saya dapat memeriksa$b
(<> 0) alih-alih$b>0
. Saya bisa menyimpan dua byte dengan.314
, tapi itu akan mengesampingkan poin.Batasnya
$a<6
cukup tepat untuk 20 poin.174 byte untuk diperbaiki
n=314
Menggunakan 314 poin menghasilkan lingkaran yang diisi dalam resolusi itu (seperti halnya 136.140, setiap angka genap di atas itu, dan semua yang di atas 317).
sumber
NetLogo - 44 byte
sumber
R,
127123 byteMenghasilkan:
Label sumbu yang bagus, eh?
-4 byte terima kasih kepada @Titus!
sumber
for(i in 2:n){for(j in 1:i)...}
. ApakahR
membutuhkan kawat gigi?BBC BASIC, 98 karakter ascii
File Tokenised berukuran 86 byte
Juru bahasa Dowload di http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
Tidak ada yang salah dengan menggambar setiap garis dua kali, penampilannya identik :-P
Tidak disatukan
Output n = 21
Ini terlihat jauh lebih baik di rendering asli daripada di browser.
sumber
LINE
fungsinya. BeatsDRAW
...Oktaf,
50 48 4645 byteIni adalah fungsi anyonmous yang memplot grafik yang kita cari.
Penjelasan:
(k=0:2*pi/N:N)+k'
MembuatN+1 x N+1
matriks adjecency penuh dan secara bersamaan mendefinisikan vektork
sudut, yang kemudian kita gunakan untuk[cos(k);sin(k)]'
, matriks koordinat di mana setiap node grafik diposisikan.gplot
hanya plot grafik yang kita inginkan.Untuk
N = 29
kita dapatkan:sumber
JavaScript (ES5) / SVG (HTML5), 181 byte
Hanya berfungsi untuk bilangan prima, seperti saran asli 37. Anda dapat membagi dua (dibulatkan) nilai awal
i
untuk mendapatkan gambar yang lebih redup. Anda juga dapat secara konsisten menyesuaikan nilai1e3,2e3
-nilai lain dengan selera (saya mulai dengan300,600
tetapi memutuskan bahwa itu terlalu kasar).sumber
MATLAB, 36 byte
Ini adalah fungsi anoymous yang menciptakan plot.
Contoh:
sumber
graph
bukan bagian dari kotak peralatan bioinformatika ... bahkan tidak tahu itu ada ... Bagus :)QBasic 4.5,
398271 byteLayar di QBasic hanya dapat menjadi 640x480, jadi lingkaran memiliki radius hanya 230 px, sayangnya. Juga, ada beberapa artefak karena kehilangan presisi float-to-int. Sepertinya ini untuk
N=36
:EDIT: Saya tidak perlu penyimpanan, deklarasi tipe dan semua perulangan. Menghitung semua Carthesians dari Polar di tempat adalah 50% lebih murah dalam hitungan byte ...
sumber
QBIC ,
9894 byteSaya telah mengonversi
jawaban QBasic asli saya@LevelRiverSt ke QBIC. Saya pikir ini akan terlalu bergantung pada fungsi-fungsi yang tidak dibangun ke dalam QBIC menjadi layak, tetapi ternyata, ia menghemat 90 byte lagi. MenggantiDRAW
untukLINE
menghemat 80 byte lainnya. Saya tahu saya lupa sesuatu yang sederhana ...Saat dijalankan dengan parameter baris perintah 36, tampilannya seperti ini:
sumber
Memproses, 274 byte (239 +
size
panggilan dan panggilan fungsi)Jujur saya tidak tahu kenapa, tetapi
setup
harus di baris kedua. Saya menggunakan https://en.wikipedia.org/wiki/Rotation_matrix untuk membantu saya menghitung matematika untuk rotasi. Program ini menghitung poin dan mendorongnya ke array, yang kita gunakan untuk menggambar garis.Ini adalah gambar poligon dengan 50 sisi (yang 100 sisi hampir hitam)
Anda dapat menambahkan
stroke(0,alpha);
untuk memiliki tepi transparan, di manaalpha
opacity garis. Berikut poligon yang sama denganalpha
dari20
.sumber
Bash + Jelly + GraphViz, 52 karakter, 52 atau 63 byte
Mengingat bahwa program yang dipertanyakan tidak setuju pada pengkodean karakter mana yang akan digunakan, program ini penuh dengan karakter kontrol. Berikut tampilannya di bawah
xxd
, dalam pengodean Latin-1 (yang mewakili setiap karakter dalam satu byte):Saya benar-benar tidak bisa menjalankan program, meskipun, tanpa mengubah input ke UTF-8 untuk beberapa alasan (yang akan membuatnya 63 byte panjang). Logikanya seharusnya berfungsi sebagai Latin-1 - tidak ada karakter yang berada di luar rentang 0 hingga 255 - tapi saya terus mendapatkan kesalahan "string index out of range" tidak peduli bagaimana saya mengkonfigurasi variabel lingkungan pengkodean karakter. Jadi ini harus dihitung sebagai 63 byte kecuali jika seseorang dapat menemukan cara untuk menjalankannya tanpa melakukan pengkodean ulang.
Program ini mungkin sedikit lebih mudah dibaca jika kita menafsirkannya dalam pengkodean Jelly:
Program ini mengambil sejumlah titik pada input standar dan menghasilkan gambar PostScript pada output standar. (Ini dapat dengan mudah diadaptasi ke keluaran dalam format apa pun yang didukung GraphViz dengan mengubah
-Tps
di akhir; Hanya saja PostScript memiliki nama terpendek. Bisa dibilang, Anda dapat menyimpan lima karakter dengan menghapus-Tps
, tetapi kemudian Anda mendapatkan output dalam format gambar internal GraphViz yang tidak didukung oleh hal lain, yang mungkin tidak diperhitungkan untuk tujuan pertanyaan.)Pada dasarnya, ini hanya program Jelly yang memanggil GraphViz untuk melakukan menggambar; Namun, Jelly tampaknya tidak memiliki kemampuan untuk menjalankan program eksternal, jadi saya harus menggunakan bash untuk menghubungkannya bersama. (Ini juga berarti bahwa lebih murah untuk membuat input permintaan Jelly dari stdin secara manual; biasanya dibutuhkan input dari baris perintah, tetapi itu berarti byte tambahan dalam bash wrapper.) Secara
circo
otomatis akan mengatur semua poin yang diminta untuk menggambar dalam lingkaran. , jadi kode Jelly hanya perlu memintanya untuk menggambar daftar poin, yang semuanya terhubung satu sama lain. Begini cara kerjanya:Penggunaan Jelly memungkinkan kita sedikit mengompresi string yang mengkonfigurasi output GraphViz melalui kamus bawaannya. Kamus memiliki
graph
,node
, danpoint
. Menjengkelkan, tidak adashape
(yaSHAPE
, tetapi GraphViz peka terhadap huruf besar-kecil), jadi kita harus menyandikan karakter per karakter.Berikut ini adalah output untuk input 21 (dengan sedikit modifikasi pada program untuk membuatnya output dalam format yang dapat diunggah ke Stack Exchange):
sumber
PHP + HTML SVG,
316263 byteVersi golf dengan
n
titik hardcoded dan tanpan
parameter input :Versi golf sebelumnya dengan parameter input untuk
n
poin, 316 byte:Penggunaan: simpan dalam file dan panggilan dari browser:
Versi tidak dikoleksi dengan parameter input untuk
n
poin dan CSS:Tidak dapat melampirkan cuplikan 32 poin yang berfungsi penuh karena batas karakter 30k untuk satu pos. Ini screenshotnya:
Cuplikan terlampir terbatas pada 18 poin karena batas posting 30k tunggal.
Tampilkan cuplikan kode
sumber
R, 108 byte
Bisa memotong 5 byte jika saya menyingkirkan argumen
,as=1
yang memaksa rasio aspek 1. Menggunakanexpand.grid
untuk membuat matriks dengan semua kemungkinan pasangan poin, dan menggunakanapply
untuk mengulanginya.R + igraph, 87 byte
Solusi lain menggunakan paket
igraph
.sumber