Hitung luas poligon.
Terinspirasi oleh video algoritme tali sepatu ini .
Tugas
Tugas Anda adalah membuat program atau fungsi yang menghitung luas poligon. Program atau fungsi didefinisikan sesuai dengan definisi default dalam meta.
Memasukkan
Anda akan menerima koordinat X dan Y dari setiap simpul poligon. Anda dapat mengambil input sebagai daftar tupel ( [[x1, y1], [x2, y2], etc]
), matriks, atau daftar datar ( [x1, y1, x2, y2, etc]
). Dua daftar yang berisi x
dan y
koordinat masing-masing juga diizinkan. Verteks diberi nomor berlawanan arah jarum jam dan simpul pertama sama dengan simpul terakhir yang disediakan, sehingga menutup poligon.
Jika mau, Anda dapat mengambil input tanpa simpul terakhir (jadi terima setiap koordinat hanya sekali).
Anda dapat mengasumsikan bahwa ujung-ujung poligon tidak berpotongan. Anda juga dapat mengasumsikan bahwa semua simpul memiliki koordinat bilangan bulat.
Keluaran
Area poligon. Semua metode keluaran standar diizinkan. Jika bahasa Anda tidak memungkinkan pembagian float dan solusinya tidak akan menjadi bilangan bulat, Anda diizinkan untuk mengembalikan sebagian kecil. Fraksi tidak harus disederhanakan, jadi pengembalian 2/4
akan diizinkan.
Menang kriteria
Kode terpendek menang!
Uji kasus
[[4,4],[0,1],[-2,5],[-6,0],[-1,-4],[5,-2],[4,4]]
55
[[1,1],[0,1],[1,0],[1,1]]
0.5
1/2
[x1, x2, x3], [y1, y2, y3]
diizinkan?Jawaban:
Jelly ,
86 byte-1 byte terima kasih kepada Emigna (redundan
€
,ÆḊ
memiliki kedalaman kiri 2)-1 byte terima kasih kepada Emigna, lagi (membagi dua,,
H
floating point tidak perlu÷2
)Tautan monadik yang mengambil daftar pasangan koordinat dengan arah berlawanan arah jarum jam sesuai contoh (dengan satu pengulangan) dan mengembalikan area.
Cobalah online!
Bagaimana?
Menerapkan algoritme tali sepatu, seperti yang dijelaskan dalam video (yang kebetulan juga saya tonton kemarin!)
sumber
[x,y]
koordinat mereka diberikan searah jarum jam daripada berlawanan arah jarum jam. Input[[1,1],[0,1],[1,0],[1,1]]
akan mengembalikan a0.5
.H
bukannya÷2
Mathematica, 13 byte
sumber
Oktaf , 9 byte
Input adalah vektor dengan nilai x dan vektor dengan nilai y . Ini berfungsi di MATLAB juga.
Cobalah online!
sumber
JavaScript (ES6),
696747 byteTerima kasih kepada @Rick karena memperhatikan bahwa kami tidak memerlukan nilai absolut jika simpul dijamin akan diurutkan dalam urutan berlawanan arah jarum jam dan untuk menyarankan untuk mengambil daftar datar sebagai input, menghemat 20 byte!
Mengambil input sebagai daftar datar simpul, termasuk simpul terakhir.
Cobalah online!
Bagaimana?
sumber
a=>(g=([x,y,...a])=>1-a?0:x*a[1]-y*a[0]+g(a))(a)/2
R,
5452 byteYang mengevaluasi fungsi:
Memanfaatkan yang telah ditentukan
F = FALSE = 0
. Menerapkan algoritma tali sepatu di video yang ditautkan :)-2 byte terima kasih kepada Giuseppe
sumber
i+-1:0
sebagai indeks baris+
juga;)Python 3 ,
7271 byteMembawa dua daftar, seperti yang diizinkan dalam komentar
Cobalah online!
Ini pada dasarnya hanya implementasi dari shoelace-formula . Bolehkah saya mendapatkan poin plus untuk golf yang sebenarnya akan Anda terapkan seperti itu? : D
-1, tidak perlu ada ruang di belakang
x,y:
.sumber
lambda x,y:
baik.Matematika , 31 byte
Cobalah online!
Mathematica, 25 byte
sumber
JS (ES6),
98959493888682817773 byteMengambil input like
[x1, x2, x3], [y1, y2, y3]
, dan melewatkan pasangan coord yang diulang.-3 byte terima kasih kepada @JarkoDubbeldam
-4 byte terima kasih kepada @JarkoDubbeldam
-1 byte terima kasih kepada @ZacharyT
-4 byte terima kasih kepada @ZacharyT
-4 byte terima kasih kepada @Rick
sumber
J, 12 byte
Dengan asumsi input adalah daftar 2 daftar elemen (yaitu, tabel)
2[\
- memecahnya menjadi tali sepatu Xs, yaitu, kotak 4 elm yang tumpang tindih-/ .*
- penentu masing-masing+/
- jumlahkan itu-:
- bagi dengan 2Jika kita mendapatkan input sebagai satu daftar, kita harus mentransformasikannya menjadi sebuah tabel, memberikan kita 20 byte:
sumber
MS-SQL, 66 byte
MS SQL 2008 dan dukungan yang lebih tinggi Open Geospatial Consortium (OGC) standar-data / fungsi spasial, yang saya manfaatkan di sini.
Input data disimpan dalam bidang p dari yang sudah ada meja g , per standar masukan kami .
Input adalah bidang teks dengan pasangan berurutan dalam format berikut:
(4 4,0 1,-2 5,-6 0,-1 -4,5 -2,4 4)
Sekarang hanya untuk bersenang-senang, jika Anda mengizinkan tabel input saya untuk menahan objek geometri standar Geospatial Konsorsium Terbuka (bukan hanya data teks), maka itu menjadi hampir sepele:
sumber
Haskell , 45 byte
Cobalah online!
sumber
Perl 5
-pa
, 62 byteCobalah online!
Mengambil input sebagai daftar koordinat X pada baris pertama diikuti oleh daftar koordinat Y pada baris kedua.
sumber