Tulis program untuk menentukan apakah poligon input cembung . Poligon ditentukan dengan satu garis yang berisi N , jumlah simpul, kemudian garis N yang berisi koordinat x dan y dari setiap simpul. Verteks akan terdaftar searah jarum jam mulai dari titik sembarang.
Contoh 1
memasukkan
4
0 0
0 1
1 1
1 0
keluaran
convex
contoh 2
memasukkan
4
0 0
2 1
1 0
2 -1
keluaran
concave
contoh 3
memasukkan
8
0 0
0 1
0 2
1 2
2 2
2 1
2 0
1 0
keluaran
convex
x dan y adalah bilangan bulat, N <1000 , dan | x |, | y | <1000 . Anda dapat mengasumsikan bahwa poligon input sederhana (tidak ada sisi yang bersilangan, hanya 2 sisi yang menyentuh setiap titik). Kemenangan program terpendek.
code-golf
math
geometry
decision-problem
Keith Randall
sumber
sumber
Jawaban:
J, 105
Lewati ketiga tes di atas.
Sunting: (111-> 115) Tangani titik co-linear dengan menghilangkan sudut pi. Memperoleh beberapa karakter di tempat lain.
Sunting: (115-> 105) Kurang bodoh.
Penjelasan untuk Tunanetra:
(1!:1)3
baca STDIN ke EOF. (Kupikir.)0&".;._2
adalah ungkapan yang bagus untuk menguraikan input seperti ini.j./"1}.
memotong jalur input pertama (N 0) dan mengubah pasangan menjadi kompleks.(,2&{.)
tempelkan dua poin pertama ke akhir daftar.3(f)\
berlaku untuk jendela geser dengan panjang 3 (3 titik untuk sudut)[:-/12 o.-@-/@}.,-/@}:
adalah kata kerja yang mengubah masing-masing 3 titik menjadi sudut antara -pi dan pi.-@-/@}.,-/@}:
menghasilkan (p1 - p2), (p3 - p2). (Ingatlah bahwa ini adalah kompleks.)12 o.
memberikan sudut untuk setiap kompleks.[:-/(...)
memberikan perbedaan dari dua sudut.(o.1)([:>-.~)(o.2)|
mod 2 pi, hilangkan sudut pi (segmen lurus), dan bandingkan dengan pi (lebih besar dari, kurang dari, tidak masalah kecuali titik-titiknya seharusnya luka dalam satu arah).1=#=
jika semua hasil perbandingan 1 atau 0 (Dengan mengklasifikasikan sendiri. Ini tampak bodoh.)echo>('concave';'convex'){~
cetak cembung.sumber
Python - 149 karakter
sumber
Ruby 1.9,
147133130124123sumber
scala: 297 karakter
sumber
def main(a:...
sebagai gantinyadef main(args:...
.