Diberi 4 poin pada bidang 2D A, B, C, D
, hitung luas wilayah persimpangan segitiga OAB
dan OCD
, di mana O
pusat pesawat, memiliki koordinat (0, 0)
.
Algoritma yang berjalan dalam kompleksitas waktu konstan (dalam hal operasi aritmatika) didorong, tetapi tidak dipaksakan.
Aturan
- Setiap titik direpresentasikan sebagai dua bilangan real, menunjukkan koordinat X dan Y mereka.
- Secara opsional, jika bahasa pemrograman Anda (atau pustaka dari bahasa pemrograman Anda) memiliki
Point
tipe bawaan atau yang setara, itu diperbolehkan untuk mengambilPoint
objek sebagai input.
- Secara opsional, jika bahasa pemrograman Anda (atau pustaka dari bahasa pemrograman Anda) memiliki
- Input diberikan sebagai 4 poin, dalam format, termasuk tetapi tidak terbatas pada:
- Daftar 8 koordinat.
- Daftar 4 poin, masing-masing poin dapat direpresentasikan dalam format yang mudah.
- Dua daftar 2 poin.
- dll.
- Anda tidak dapat mengasumsikan pemesanan titik tertentu (urutan berlawanan arah jarum jam atau urutan searah jarum jam)
- Anda tidak dapat mengasumsikan bahwa titik
O
dilewatkan sebagai input. Dengan kata lain, program tidak boleh mengambil dan menggunakan input asing. - Anda tidak dapat menganggap semua poin berbeda. Dengan kata lain, segitiga mungkin akan menurun. Anda juga harus menangani kasing (lihat kasing di bawah)
- Perbedaan absolut atau relatif harus kurang dari untuk kasus uji sampel di bawah ini.
10-3
Kriteria menang
Ini adalah kode-golf , jawaban terpendek dalam byte menang!
Contoh uji kasus
Ax Ay Bx By Cx Cy Dx Dy area
5 1 1 3 -1 0 0 -1 0
5 1 1 3 -1 0 0 0 0
5 1 1 3 0 0 0 0 0
5 1 1 3 3 4 4 -3 4.50418
5 1 1 3 1 2 2 1 1.5
5 1 1 3 -2 5 4 -2 1.74829
5 1 1 3 -2 5 5 4 2.96154
5 1 1 3 3 5 5 4 1.88462
5 1 1 3 3 5 3 1 3.92308
5 1 1 3 3 5 4 -1 5.26619
5 1 1 3 5 1 4 -1 0
5 1 1 3 5 1 1 3 7
1 3 1 3 5 1 1 3 0
1 3 1 3 1 3 1 3 0
4 8 4 -1 -2 6 -2 -3 0
1.2 3.4 -0.3 4.2 5 7.6 -1.1 2.4 2.6210759326188535
3.1 0.6 0.1 7.2 5.2 0.7 0.9 8 9.018496993987977
Jika ada yang mau, berikut adalah output untuk kelompok kasus uji pertama dalam bentuk yang tepat:
0
0
0
46375/10296
3/2
1792/1025
77/26
49/26
51/13
23345/4433
0
7
0
0
0
Gambar ilustrasi untuk test case 5 1 1 3 3 4 4 -3
(bidang segi empat hijau adalah output yang diharapkan):
[ ]
Jawaban:
Bahasa Wolfram (Mathematica) , 55 byte
Cobalah online!
Mencukur beberapa byte dari jawaban sepele.
Mengganti
Area
denganDiscretizeRegion
akan menunjukkan persimpangan.Ngomong-ngomong, ini akan bekerja dengan simpleks apa pun, bukan hanya segitiga.
-1 Byte terima kasih kepada JungHwan Min
Saran @ user202729 menambahkan 4 byte tetapi membuatnya menghasilkan 0 untuk segitiga yang merosot
sumber
{{0,0}}
ke{0{,}}
(ini berfungsi karena ekspresi bernilai untuk{Times[0, {Null, Null}]}
)Python 2 + PIL,
341318313284270 byteTerima kasih khusus kepada Dennis yang segera menambahkan PIL pada TIO
-23 byte, terima kasih kepada Tn. Xcoder
Cobalah online! atau Coba semua test case
Untuk menghitung perbedaannya, gambarlah segitiga secara harfiah dan periksa jumlah piksel yang dicat pada kedua gambar.
Metode ini memasukkan kesalahan pembulatan, yang diperlunak dengan meningkatkan ukuran gambar.
Penjelasan
sumber