Tantangan
Diberikan jumlah persegi panjang yang sewenang-wenang, menghasilkan jumlah total persimpangan saat digambar dalam bidang 2D.
Persimpangan di sini didefinisikan sebagai titik P
yang dilintasi oleh dua garis yang saling orthogonal dan keduanya tidak berakhir P
.
Contoh
Setiap persegi panjang di sini dilambangkan dengan 2-tuple dengan koordinat sudut kiri atas terlebih dahulu dan koordinat sudut kanan bawah kedua.
[(-8,6), (- 4, -2)] [(-4,9), (4,3)] [(2,10), (14,4)] [(1,7), (10, -6)] [(7,4), (10,2)] [(5,2), (9, -4)] [(-6, -4), (- 2, -6)]
Kotak itu membuat 6 persimpangan, yang harus menjadi output Anda.
- Seperti yang Anda lihat pada gambar di atas, menyentuh persegi panjang tidak akan membuat persimpangan di sini dan tidak dihitung.
- Anda dapat menyandikan segi empat dalam format apa pun yang Anda inginkan. Jelaskan format mana yang Anda gunakan.
- Jika beberapa persegi panjang berpotongan pada titik yang sama, itu hanya dihitung sebagai satu persimpangan.
- Koordinat akan selalu berupa bilangan bulat.
- Tidak akan ada persegi panjang duplikat di input.
- Anda akan selalu mendapatkan setidaknya satu persegi panjang sebagai input.
- Anda tidak boleh menggunakan bawaan apa pun yang memecahkan masalah ini secara langsung. Selain itu, Anda tidak boleh menggunakan builtin yang memecahkan persamaan. Semua bawaan lainnya diizinkan.
- Output harus berupa bilangan bulat tunggal yang menunjukkan jumlah persimpangan.
Aturan
- Fungsi atau program lengkap diizinkan.
- Aturan default untuk input / output.
- Celah standar berlaku.
- Ini adalah kode-golf , sehingga byte-count terendah akan menang. Tiebreak adalah pengiriman sebelumnya.
Uji kasus
Format yang sama seperti pada contoh di atas. Persegi panjang dibungkus dalam daftar.
[[(-8,6), (- 4, -2)], [(- 4,9), (4,3)], [(2,10), (14,4)], [(1 , 7), (10, -6)], [(7,4), (10,2)], [(5,2), (9, -4)], [(- 6, -4), (-2, -6)]] -> 6 [[(-2,2), (6, -4)]] -> 0 [[(-12,10), (- 8,6)], [(- 14,6), (- 10,2)], [(- 10,6), (- 6,2)]] - > 0 [[(-4,10), (6,2)], [(- 2,8), (4,3)], [(1,6), (8,4)], [(2,11) ), (5,5)]] -> 10 [[(8,2), (12, -2)], [(10,0), (14, -4)]] -> 2 [[(0,2), (2,0)], [(0,1), (3,0)]] -> 1 [[(-10, -2), (- 6, -6)], [(- 6, -2), (- 2, -6)], [(- 8, -4), (- 4, -8)]] -> 3
Selamat Coding!
[[(0,0),(1,2)],[(0,0),(2,1)]]
apakah ada 1 persimpangan?Jawaban:
JavaScript (ES6), 186 byte
Pisahkan masing-masing persegi panjang ke dalam garis komponennya, kemudian memotong garis horizontal dan vertikal, membangun daftar persimpangan untuk menghindari duplikat.
sumber
[[-4,10,6,2],[-2,8,4,3],[1,6,8,4],[2,11,5,5]]
. Karena JavaScript tidak memiliki tupel, jika Anda mencoba menggunakan contoh Anda secara harfiah, Anda akan memicu operator koma sebagai gantinya, membatalkan input.Mathematica 138 byte
Belum selesai! Ini berfungsi untuk semua kasus kecuali
[[(0,0),(1,2)],[(0,0),(2,1)]]
Contoh
sumber