Sebuah set point arborally puas adalah seperangkat 2D poin sehingga, untuk setiap persegi panjang sumbu-blok yang dapat dibentuk dengan menggunakan dua poin di set sebagai sudut yang berlawanan, yang persegi panjang berisi atau sentuhan setidaknya satu titik lainnya. Berikut ini definisi yang setara dari Wikipedia:
Set poin dikatakan puas secara arboral jika properti berikut ini berlaku: untuk setiap pasangan poin yang tidak keduanya terletak pada garis horizontal atau vertikal yang sama, ada titik ketiga yang terletak di dalam persegi panjang yang direntang oleh dua titik pertama ( baik di dalam atau di batas).
Gambar berikut menggambarkan bagaimana persegi panjang terbentuk. Set titik ini TIDAK puas secara arboral karena persegi panjang ini perlu mengandung setidaknya satu titik lagi.
Dalam seni ASCII, set poin ini dapat direpresentasikan sebagai:
......
....O.
......
.O....
......
Sedikit modifikasi dapat membuat ini cukup memuaskan:
......
....O.
......
.O..O.
......
Di atas, Anda dapat melihat bahwa semua persegi panjang (yang hanya ada satu) mengandung setidaknya tiga poin.
Berikut adalah contoh lain dari set point yang lebih kompleks yang dipuaskan secara arborally:
Untuk setiap persegi panjang yang dapat ditarik yang mencakup dua titik, persegi panjang itu mengandung setidaknya satu titik lainnya.
Tantangan
Mengingat kotak persegi panjang poin (yang saya mewakili dengan O
) dan ruang kosong (yang saya mewakili dengan .
), output truthy nilai jika arborally puas, atau falsey nilai jika tidak. Ini adalah kode-golf.
Aturan tambahan:
- Anda dapat memilih untuk memiliki karakter
O
dan.
bertukar dengan pasangan karakter ASCII yang dapat dicetak lainnya. Cukup tentukan pemetaan karakter yang digunakan program Anda. - Grid akan selalu berbentuk persegi panjang. Baris baru tambahan diperbolehkan.
Lebih banyak contoh
Puas puas:
.OOO.
OO...
.O.OO
.O..O
....O
..O..
OOOO.
...O.
.O.O.
...OO
O.O.
..O.
OOOO
.O.O
OO..
...
...
...
...
..O
...
O.....
O.O..O
.....O
OOO.OO
Tidak Puas Arborally:
..O..
O....
...O.
.O...
....O
..O..
O.OO.
...O.
.O.O.
...OO
O.....
..O...
.....O
Jawaban:
Siput , 29
30 39byteIni bekerja dengan menelusuri 2 sisi dari persegi panjang, dan kemudian memeriksa apakah ada beberapa persegi yang mengandung O sehingga bepergian dalam garis lurus dari persegi di 2 arah mata angin akan menghasilkan memukul sisi persegi panjang.
Mencetak maksimal 1 dan area kisi-kisi jika input "memuaskan secara arbor"; jika tidak 0.
sumber
Oracle SQL 11.2,
364344 byte: g adalah kisi sebagai string
: w adalah lebar kisi
Mengembalikan tidak ada garis sebagai kebenaran, mengembalikan persegi panjang yang tidak cocok dengan kriteria sebagai falsy
Tidak bermain golf
Tampilan v menghitung koordinat dari setiap titik O.
Bagian pertama dari minus mengembalikan semua persegi panjang, di mana klausa memastikan bahwa suatu titik tidak dapat dipasangkan dengan dirinya sendiri.
Bagian kedua mencari titik ketiga di setiap persegi panjang. Titik itu perlu memiliki satu koordinat, x atau y, sama dengan koordinat itu untuk salah satu dari dua titik yang mendefinisikan persegi panjang. Koordinat lain dari titik ketiga harus berada dalam kisaran yang dibatasi oleh koordinat tersebut untuk masing-masing poin yang menentukan persegi panjang.
Bagian terakhir dari klausa where memastikan bahwa titik ketiga bukan salah satu dari dua titik yang menentukan persegi panjang.
Jika semua persegi panjang memiliki setidaknya titik ketiga maka bagian pertama minus sama dengan bagian kedua dan kueri tidak mengembalikan apa pun.
sumber
MATL , 38 byte
Ini menggunakan array char 2D sebagai input, dengan baris dipisahkan oleh
;
. Jadi contoh pertama adalahSisa dari kasus uji dalam format ini adalah sebagai berikut.
Puas puas:
Tidak puas puas:
Cobalah online! Anda juga dapat memverifikasi semua kasus uji sekaligus .
Penjelasan
Kode pertama kali mendapatkan koordinat karakter
O
dalam input. Kemudian menggunakan dua loop bersarang. Loop luar mengambil setiap titik P (2-tupel koordinatnya), membandingkan dengan semua titik, dan membuat titik-titik yang berbeda dari P dalam dua koordinat. Itu adalah poin dari yang bisa membentuk persegi panjang dengan P. Sebut saja set R.Loop dalam mengambil setiap titik T dari R, dan memeriksa apakah persegi panjang yang ditentukan oleh P dan T mencakup setidaknya 3 poin. Untuk melakukan itu, ia mengurangi P dari semua poin; yaitu, memindahkan asal koordinat ke P. Titik berada dalam persegi panjang jika masing-masing koordinat dibagi dengan koordinat T yang sesuai dalam interval tertutup [0, 1].
sumber
PHP,
1123 byte,851 byte, 657 byte(php pemula)
penjelasan (kode komentar):
sumber
C, 289 byte
Membutuhkan trailing newline, yang diizinkan (tanpa baris baru, kodenya akan dua byte lebih besar). Output 0 (tidak puas arborally) atau 1 (puas arborally).
sumber