Spirograph adalah mainan yang menggambar hipotrokoid dan epitrokoid. Untuk tantangan ini, kami hanya akan fokus pada hypotrochoids.
Dari Wikipedia :
Hipotrokoid adalah roulette yang dilacak oleh titik yang melekat pada lingkaran jari-jari r yang berputar di dalam lingkaran tetap jari-jari R , di mana titik tersebut adalah jarak d dari pusat lingkaran dalam.
Persamaan parametrik untuk mereka dapat didefinisikan sebagai:
Di mana θ adalah sudut yang dibentuk oleh horizontal dan pusat lingkaran bergulir.
Tugas Anda adalah menulis program yang akan menggambar jalur yang dilacak oleh titik yang ditentukan di atas. Sebagai masukan, Anda akan diberikan R , r , dan d , semua bilangan bulat antara 1 dan 200 inklusif.
Anda dapat menerima input ini dari stdin, argumen, atau input pengguna, tetapi tidak dapat di-hardcode ke dalam program. Anda dapat menerimanya dalam bentuk apa pun yang paling nyaman bagi Anda; sebagai string, integer, dll.
Menganggap:
- Unit input diberikan dalam piksel.
- R > = r
Keluaran harus berupa representasi grafis dari hipotrokoid yang didefinisikan oleh input. ASCII- atau output berbasis teks lainnya tidak diizinkan. Gambar ini dapat disimpan ke file atau ditampilkan di layar. Sertakan tangkapan layar atau gambar output untuk input pilihan Anda.
Anda dapat memilih warna apa pun yang Anda suka untuk jalur / latar belakang, tunduk pada batasan kontras. Kedua warna harus memiliki komponen 'Nilai' HSV setidaknya setengah skala terpisah. Misalnya, jika Anda mengukur HSV dari [0...1]
, harus ada setidaknya 0.5
perbedaan. Antara [0...255]
harus ada 128
perbedaan minimum .
Ini adalah kode golf, ukuran minimum kode sumber dalam byte yang menang.
sumber
R > r
atauR ≥ r
? (Sama untukr
dand
.)R>=r
, tetapid
tidak dibatasir
, dan bisa di mana saja dalam kisaran 1-200.R=200, r=1, d=200
. Anda dapat mengubah ukuran gambar ke input jika Anda mau, atau menyimpannya pada ukuran yang konstan, selama semuanya terlihat.Jawaban:
Mathematica, 120 byte
Output kode dan contoh yang tidak digabungkan:
Jika saya dapat memasukkan sumbu dalam plot, saya dapat menyimpan 9 karakter lainnya.
sumber
JavaScript (ECMAScript 6) -
312314 KarakterJSFIDDLE
Contoh Output
r = 1, R = 200, d = 30
sumber
Python: 579
Ringkasan
Ini sama sekali tidak kompetitif mengingat jawaban Mathematica, tetapi saya memutuskan untuk tetap mempostingnya karena gambar-gambarnya cantik dan dapat menginspirasi seseorang atau berguna bagi seseorang. Karena jauh lebih besar, pada dasarnya saya membiarkannya tidak diserang. Program mengharapkan input baris perintah dari R, r, d.
Tangkapan layar
Berikut adalah dua contoh, satu untuk (5,3,5) dan satu untuk (10,1,7)
Kode
sumber
Perl / Tk -
239227R = 120, r = 20, d = 40:
R = 128, r = 90, d = 128:
R = 179, r = 86, d = 98:
sumber
Memproses, 270
Input dimasukkan melalui konsol, satu nomor per baris.
Cuplikan layar untuk R = 65, r = 15, d = 24:
sumber
GeoGebra, 87
Yaitu, jika Anda menganggap GeoGebra sebagai bahasa yang valid.
Menerima input dari bilah input GeoGebra, dalam format
<variable>=<value>
, misR=1000
.Perhatikan bahwa Anda mungkin perlu mengubah ukuran zoom secara manual untuk melihat seluruh gambar.
(Masalah di bagian bawah jendela adalah bilah masukan yang saya bicarakan)
Cobalah online di sini .
sumber
HTML + Javascript 256
286 303Edit Panggilan 1 yang dihapus untuk memindahkanTo, tetap berfungsi. Bisa menghemat lebih banyak pemotongan beginPath, tetapi hanya berfungsi pertama kali
Edit2 30 byte disimpan thx @ ӍѲꝆΛҐӍΛПҒЦꝆ
Uji
Masukkan input ke dalam kotak teks (pisahkan koma) lalu tekan tab
sumber
R, 80 byte
Namun, jika seseorang menginginkan angka 'bersih' (tanpa sumbu, tanpa label, dll), maka kodenya harus sedikit lebih panjang (88 karakter):
Salah satu contoh kode menggunakan versi f:
Beberapa contoh keluaran:
sumber
,
??C # 813, adalah 999
Perlu beberapa pekerjaan untuk mengurangi jumlah byte. Saya berhasil menguranginya sedikit. Ia menerima tiga bilangan bulat yang dipisahkan ruang dari Konsol.
Sampel keluaran:
sumber
skrip shell + gnuplot (153)
Sebagian besar upaya adalah untuk menghapus sumbu dan tics, mengatur ukuran dan jangkauan, dan meningkatkan presisi. Untungnya, gnuplot alami untuk bermain golf, sehingga sebagian besar perintah dapat disingkat. Untuk menyimpan karakter, output harus diarahkan ke file gambar secara manual.
Memanggil skrip dengan
spiro.sh 175 35 25>i.png
memberisumber
R, 169 karakter
Bertakuk:
Contoh:
sumber
SmileBASIC, 96 byte
Input: 50,30,50:
sumber
Befunge-98, 113 byte
Kode ini bergantung pada sidik jari Fixed Point Maths (FIXP) untuk beberapa perhitungan trigonometri, dan Turtle Graphics (TURT) sidik jari untuk menggambar jalur spirograph.
Grafik Turtle di Befunge sangat mirip dalam perilaku dengan grafis dalam bahasa pemrograman Logo . Anda menggambar dengan 'kura-kura' (berfungsi sebagai pena Anda), yang Anda arahkan di sekitar permukaan output. Ini berarti mengarahkan kura-kura ke arah tertentu, dan kemudian memerintahkannya untuk bergerak maju dengan jarak tertentu.
Untuk bekerja dengan sistem ini, saya perlu menyesuaikan persamaan spirograph asli menjadi sesuatu yang sedikit lebih ramah kura-kura. Saya tidak yakin apakah ini pendekatan terbaik, tetapi algoritme yang saya gunakan bekerja dengan cara seperti ini:
Perhatikan bahwa ini sebenarnya menggambarkan jalur dengan semacam pola zig-zag, tetapi Anda tidak benar-benar memperhatikan kecuali Anda memperbesar dekat pada gambar.
Berikut ini contoh menggunakan parameter R = 73, r = 51, d = 45.
Saya telah menguji kodenya dengan CCBI dan cfunge , yang keduanya menghasilkan output dalam bentuk gambar SVG. Karena ini adalah format vektor yang dapat diskalakan, gambar yang dihasilkan tidak memiliki ukuran piksel - hanya skala yang sesuai dengan ukuran layar (setidaknya bila dilihat di browser). Contoh di atas adalah tangkapan layar yang telah dipangkas dan diskalakan secara manual.
Secara teori kode ini juga dapat bekerja pada Rc / Funge , tetapi dalam hal ini Anda harus menjalankan pada sistem dengan XWindows, karena itu akan mencoba untuk membuat output di jendela.
sumber
wxMaxima : 110
Ini disebut dalam sesi interaktif via
f(#,#,#)
. Sebagai sampel, pertimbangkanf(3,2,1)
:sumber
Raket
Keluaran:
sumber