Mengingat koordinat dari sudut kiri atas dua kotak dan panjang sisi mereka, tentukan apakah kotak tumpang tindih. Sebuah persegi mencakup garis atas dan kiri, tetapi bukan garis bawah dan kanan. Artinya, sebuah titik (a,b)
berada di dalam persegi dengan panjang sisi k
yang dimulai pada (x,y)
jika dan hanya jika x <= a < x+k
dan y <= b < y+k
. Kuadrat dengan panjang sisi 0 merosot dan tidak akan dipertimbangkan di sini, dengan demikian, k
akan positif.
Seperti biasa, semua aturan standar berlaku. Input dan output mungkin dalam bentuk apa pun yang nyaman, asalkan itu dapat dibaca manusia dan tidak ada perhitungan. Pastikan untuk menentukan format input apa yang Anda gunakan. Kode Anda harus mengambil enam angka dan menghasilkan kebenaran jika kotak tumpang tindih dan palsu sebaliknya.
Uji Kasus
x1 y1 k1 x2 y2 k2 overlap?
1 1 1 0 1 1 false
0 0 3 1 1 1 true
1 1 1 0 0 3 true
0 0 3 2 1 2 true
0 0 2 1 1 2 true
1 1 2 0 0 2 true
0 1 2 1 0 2 true
1 0 2 0 1 2 true
2 0 2 0 2 2 false
1 0 3 0 1 1 false
0 2 3 0 0 2 false
Semua input akan berupa bilangan bulat non-negatif. Yang mengatakan, saya berharap bahwa banyak atau sebagian besar solusi juga akan mampu menangani hal negatif dan mengapung.
Jawaban:
Python, 33 byte
Python mendukung rantai ketidaksetaraan bahkan ketika mereka menunjuk ke arah yang berlawanan.
Interval x-koordinat
[x,x+k)
dan[X,X+K)
tumpang tindih selama tidak ada yang sepenuhnya ke kanan yang lain, yang berarti bahwa setiap titik akhir kiri interval adalah kiri dari titik akhir kanan interval lainnya.Itu bisa digabungkan menjadi ketimpangan bersama
-K<X-x<k
. Menulis hal yang sama untuk koordinat-y dan menyambungkannya pada-K
memberikan ekspresisumber
MATL,
14111054 byteSolusi ini menerima input dalam bentuk dua array:
[x1, y1; x2, y2]
[k2; k1]
Cobalah secara Online
Versi yang sedikit dimodifikasi untuk menjalankan semua kasus uji
Penjelasan
sumber
MATLAB,
3621 byteMembuat fungsi anonim yang dapat dievaluasi sebagai
ans(a,b)
. Menerima dua input dari format berikut:[x1, y1; x2, y2]
.[k2; k1]
Semua test case di sini .
Penjelasan
Berikut ini adalah solusi un-golfed yang dikomentari
sumber
JavaScript (ES6), 38 byte
Jika d - a ≥ c maka kuadrat kedua di sebelah kanan yang pertama. Demikian pula kondisi lain memeriksa bahwa itu tidak ke kiri, di bawah atau di atas.
sumber
Jelly , 8 byte
Input adalah daftar bersarang [[x1, y1, k1], [x2, y2, k2]] , output adalah daftar semua koordinat titik yang bertambah dengan koordinat bilangan bulat yang umum untuk kedua kotak (salah jika kosong, benar jika kosong, jujur jika tidak ).
Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
TI Basic, 36 byte
sumber
Java, 78 byte
sumber
Object
tipe pengembalian untuk -1 byteOktaf, 17 byte
Logika yang sama dengan jawaban MATLAB saya di atas, kecuali bahwa Oktaf mendukung penyiaran dimensi secara otomatis sehingga kami dapat menggantinya
[b,b]
dengan mudahb
.Semua test case di sini
sumber
SmileBASIC,
7657 byteBuat sprite dengan ukuran / posisi kotak pertama, lalu periksa apakah bertabrakan dengan kotak kedua.
sumber
x86-64 Kode mesin, Windows 22 byte
Tanda tangan C ++:
Mengembalikan 0 jika kotak tidak tumpang tindih dan -1 (0xFFFFFFFF) sebaliknya. Input adalah vektor 2 bilangan bulat 64-bit untuk x, y dan k (
_mm_set_epi64x(x1, x2)
dll.).sumber
05AB1E , 5 byte
Pelabuhan @Suever 's jawaban MATL , dengan konversi tambahan untuk hasil truthy / falsey. Format input karena itu juga sama:
Input pertama sebagai
[[x1,y1],[x2,y2]]
dan input kedua sebagai[k2,k1]
.Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber