Hanya diberi penggaris dan kompas, tulislah sebuah belah ketupat di dalam persegi panjang yang diberikan, bagikan dua titik yang berlawanan.
Memasukkan
Input adalah dimensi persegi panjang. Dalam contoh yang ditunjukkan, itu akan menjadi 125, 50
. Anda dapat mengambil input dengan cara apa pun yang paling nyaman (seperti dua bilangan bulat, daftar, string, dll).
Dimensi yang lebih besar akan menjadi 100 minimum, sedangkan yang lebih kecil akan menjadi minimum 25. Keduanya tutup pada 200.
Keluaran
Output akan berupa gambar (ditampilkan di layar atau disimpan sebagai file) yang ditampilkan
- Kotak input
- Semua garis / lingkaran "yang berfungsi"
- Belah ketupat yang tertulis
dalam warna berbeda. Pada gambar di atas, persegi panjang berwarna hitam, garis kerja biru, dan oranye belah ketupat. Garis-garis harus digambar dalam urutan yang ditunjukkan dalam daftar (misalnya, belah ketupat menimpa garis yang bekerja dan persegi panjang).
Gambar output harus cukup besar untuk memuat semuanya. Misalnya, lingkaran yang ditampilkan tidak dapat melampaui batas.
metode
Metode yang digunakan dalam contoh gambar di atas adalah:
- Gambarlah sebuah lingkaran menggunakan sudut kiri bawah sebagai pusat, dan kanan atas sebagai titik pada perimeter, memberikan jari-jari sama dengan diagonal persegi panjang itu.
- Lakukan hal yang sama, tetapi bertukar titik pusat dan perimeter.
- Gambarlah garis di antara persimpangan dua lingkaran, berikan garis-berat tegak lurus ke diagonal persegi panjang itu.
- Gunakan persimpangan garis dan persegi panjang baru untuk menggambar belah ketupat.
Ini berhasil karena diagonal interior belah ketupat selalu saling membagi dua. Saya tidak menyertakan bukti lengkap tentang hal ini di sini.
Ini bukan satu - satunya metode untuk mendapatkan belah ketupat Anda, dan Anda dapat menggunakan yang lain, mengingat Anda menjelaskan apa yang Anda lakukan. Saya percaya itu mungkin yang paling mudah.
Aturan
Anda hanya dapat menggambar lingkaran dan garis (atau lebih tepatnya, segmen garis). Lingkaran didefinisikan dengan titik pusat dan titik perimeter. Garis ditentukan oleh dua titik. Garis tidak harus panjang tertentu, tetapi paling tidak harus mencakup titik-titik yang menentukan (perhatikan contoh gambar: garis melewati sedikit persimpangan lingkaran, tetapi tidak ke tepi). Untuk lingkaran, jari-jari dari pusat ke titik perimeter yang dipilih dianggap sebagai garis kerja, dan harus ditunjukkan.
Untuk meraster garis, Anda dapat menggunakan algoritme yang dikenali (misalnya milik Bresenham), atau bergantung pada apa pun yang mungkin dimiliki bahasa Anda. Jika output Anda berbasis vektor, pastikan ditampilkan pada resolusi setidaknya sebesar persegi input dalam piksel. Selain itu, Anda akan menggambar di atas kanvas polos, jadi harap tekan tanda kisi atau keluaran yang asing.
Jangan curang! Anda hanya dapat menentukan penempatan titik / garis / lingkaran menggunakan apa yang telah Anda buat sejauh ini. Jika Anda tidak dapat menjelaskan cara menggunakan garis / lingkaran kerja Anda untuk menunjukkan bahwa itu adalah belah ketupat, Anda salah melakukannya.
Anda dapat menggunakan pasangan titik berlawanan mana saja yang Anda inginkan, dan persegi panjang tidak perlu ditarik garis-sejajar, asalkan outputnya benar.
Input akan selalu menjadi persegi panjang non-persegi, jadi jangan khawatir tentang casing khusus itu.
Terakhir, ini adalah kode standar golf, jadi ukuran terendah dalam byte menang.
sumber
Jawaban:
HTML + JavaScript (ES6), 34 + 353 = 387 byte
Masukan harus diberikan dalam format
[125,50]
.Hanya banyak matematika dan gambar ... Kotak persegi panjang digeser jika tingginya lebih besar dari lebar, yang saya yakini diperbolehkan.
sumber
444
: P400
;-)Mathematica,
157148158 byteTerima kasih kepada Martin Ender untuk komentar dengan kualitas tinggi yang biasa mereka! 9 byte disimpan dalam kasus ini.
Diedit setelah itu diklarifikasi bahwa argumen dapat datang dalam urutan apa pun; 10 byte ditambahkan sebagai kompensasi.
Sekali lagi, ini adalah tempat Mathematica bersinar: output grafis tingkat tinggi yang melibatkan perhitungan matematis. Kode yang sama dengan spasi dan baris baru untuk keterbacaan manusia:
Fungsi tanpa nama dari satu argumen yang merupakan pasangan angka positif yang diurutkan; final
@@ Sort@# &
mengkonversi pasangan itu menjadi dua argumen numerik di mana angka pertama adalah yang lebih kecil.Line
menghasilkan jalur poligon dari titik ke titik, yang akan berubah menjadi poligon tertutup jika titik pertama dan terakhir adalah sama;Circle
menghasilkan lingkaran dengan pusat dan jari-jari yang diberikan. Poin khususo
danc
(sudut persegi panjang kiri dan kanan atas),p
(sudut belah ketupat ketiga, yang diberikan oleh rumus matematika), dank
(membantu menggambar garis-garis tegak lurus) diberi nama sepanjang jalan untuk menghemat byte ketika dipanggil lagi , seperti pasangan poin khususl = {o,c}
. Mathematica dengan senang hati menambahkan poin secara langsung, mengalikan kedua koordinat dengan faktor yang sama, mengambil titik produk mereka, dll., Yang semuanya menyederhanakan kode.Output sampel, dengan argumen
125
dan50
:sumber
{0,0}
. Karena tidak ada persyaratan untuk menggunakan biru dan oranye, Anda dapat menyimpan byte dengan menggunakanRed
alih-alihOrange
. Anda menggunakanLine
empat kali lebih dari cukup untuk menyimpan byte darii=Line;
(sebagai aturan praktis, jika ekspresi memilikin
karakter dan Anda menggunakannyam
waktu yang Anda butuhkan(m-1)*(n-1) > 4
, lebih sedikit jika Anda dapat menetapkan variabel saat digunakan pertama kali tanpa tanda kurung).0{,}
trik fantastis: D@@Sort@#&
dan menukar#
dan#2
seluruh kode atau sebagai alternatif mengadaptasinya untuk bekerja dengan persegi panjang orientasi potret.MetaPost, 473 (dengan warna) 353 (tanpa warna)
Berwarna (473 bytes):
Tidak berwarna (353 byte):
Belum pernah menggunakan ini sebelumnya, dan saya yakin saya telah membunuhnya ...
Tetapi ketika Anda menjalankannya di situs web ini:
http://www.tlhiv.org/mppreview/
Menggunakan persimpangan lingkaran untuk menggambar sumbu kedua, dan kemudian menggunakan persimpangan sumbu dan persegi panjang untuk menggambar belah ketupat terakhir. Padahal aku bisa saja curang dan hanya menggambar garis tegak lurus dengan sumbu pertama haha.
Untuk mengubah dimensi, cukup ubah A dan B.
Apapun, Anda berakhir dengan (untuk L = 170, H = 100):
sumber
Desmos, 375 (atau 163) byte
w
danh
merupakan input. Cobalah di Desmos!Alternatif versi 163-byte:
Versi ini mengharuskan setiap baris untuk disalin dan ditempelkan ke setiap baris terpisah ke Desmos. Meta masih perlu memutuskan apakah ini adalah metode penghitungan yang valid, tetapi metode yang pertama jelas baik-baik saja.
sumber
ImageMagick Versi 7.0.3 + bash + sed, 496 byte
Hasil dengan "rhombus.sh 180 120"
Lebih tepat (menggunakan kanvas 6400x6400 bukannya 800x800), 570 byte
Persimpangan tidak tepat; arahan "strokewidth" membuat garis-garis cukup lebar untuk memastikan setidaknya satu piksel penuh dicampur hanya dengan warna dari dua garis yang berpotongan, tetapi dalam kasus terburuk (25x200 dan 200x25) penyeberangan berada pada sudut kecil sehingga awan piksel campuran panjangnya beberapa piksel, dan karena kami memilih piksel campuran pertama dan terakhir, ada sedikit kesalahan. Menggunakan kanvas 8x lebih besar dengan goresan yang sama dan kemudian menurunkan hasilnya mengurangi kesalahan menjadi kurang dari satu piksel, tetapi pada sekitar waktu hukuman 64x.
Hasil normal 800x800 dibandingkan 6400x6400 tepat:
Tidak Disatukan:
sumber
R, 290 byte
Fungsi anonim, output ditampilkan di layar. Sedikit ungolfed, dengan komentar:
Contoh output untuk (120.100):
sumber
LibreLogo , 270 byte
Kode:
Hasil:
Penjelasan:
sumber
Python 3.5 + Tkinter, 433 atau 515 byte
Tidak Berwarna (433 byte):
Berwarna (515 byte):
Fungsi bernama yang mengambil input sebagai 2 angka yang dipisahkan koma. Output diberikan dalam jendela terpisah yang mungkin harus Anda ubah ukurannya untuk melihat output penuh. Berikut adalah contoh keluaran berwarna untuk
V(180,130)
:sumber
SmileBASIC, 280 byte
(Cuplikan layar / penjelasan akan segera diposting) Warna latar belakang hitam, persegi panjang merah, lingkaran dan garis putih, dan belah ketupat berwarna kuning.
sumber