Salah satu hiburan matematika favorit saya adalah menggambar kotak persegi panjang, kemudian menemukan semua persegi panjang yang terlihat di kotak itu. Di sini, ambil pertanyaan ini, dan usahakan sendiri!
Bisakah Anda menghitung jumlah persegi panjang?
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
Jumlah total persegi panjang untuk ini 4 x 4 papan minichess persis
100
Apakah Anda benar?
Matematika terkait: Berapa banyak persegi panjang yang ada pada kotak-kotak 8 × 8?
Tantangan
Tulis fungsi / program terpendek yang menghitung jumlah persegi panjang yang terlihat pada kisi / gambar non-toroidal .
Tantangan terkait: Hitung Persegi Panjang Unik! , Temukan jumlah persegi panjang dalam array byte 2D .
Masukkan format
Fungsi atau program Anda dapat memilih untuk bekerja dengan input berbasis teks atau input grafis.
Input berbasis teks
Kisi-kisi akan berupa kisi ASCII m -by- n ( m rows, n kolom) yang terdiri dari karakter berikut:
- ruang,
-untuk bagian segmen garis horizontal,|untuk bagian segmen garis vertikal, dan+untuk sudut.
Anda dapat memperkenalkan kisi ASCII ini sebagai input / argumen ke program / fungsi Anda dalam bentuk
- string tunggal dibatasi oleh jeda baris,
- string tanpa baris baru tetapi dengan satu atau dua bilangan bulat yang mengkode dimensi grid, atau
- berbagai string.
Catatan: Input berbasis teks mengandung setidaknya 1 baris dan setidaknya 1 kolom.
Input Grafis
Atau, kisi-kisi dikodekan sebagai gambar PNG hitam-putih dengan lebar 5 * n piksel dan tinggi 5 * m piksel. Setiap gambar terdiri dari 5 px * 5 px blok yang sesuai dengan input ASCII dengan:
- Spasi dikonversi menjadi blok putih. Blok-blok ini disebut blok spasi .
- Segmen dan sudut garis dikonversi ke blok non- putih. Pixel tengah blok semacam itu berwarna hitam.
- Sunting: Jika dua sudut (dalam input ASCII) dihubungkan oleh segmen garis, pusat blok yang sesuai (dalam input grafis) juga harus dihubungkan oleh garis hitam.
Ini berarti bahwa setiap blok hanya dapat dipilih
(Klik di sini untuk gambar yang lebih besar) .
Catatan: Batas biru hanya untuk tujuan ilustrasi. Input grafis minimal 5 px lebar dan 5 px tinggi. Anda dapat mengonversi input grafis ke gambar monokrom apa pun, yang berpotensi berupa format file gambar lainnya). Jika Anda memilih untuk mengonversi, sebutkan dalam jawabannya. Tidak ada penalti untuk konversi.
Format output
Jika Anda menulis sebuah program, program tersebut harus menampilkan angka non-negatif yang menunjukkan jumlah total persegi panjang dalam input.
Jika Anda menulis fungsi, itu juga harus mengembalikan angka non-negatif yang menunjukkan jumlah persegi panjang dalam input.
Contoh Kasus
Kasus 1, Grafik:
( 30 px * 30 px), ASCII: ( 6 baris, 6 cols)
+--+
| |
| ++-+
+-++ |
| |
+--+
Output yang diharapkan: 3
Kasus 2, Grafik:
( 20 px * 20 px), ASCII: ( 4 baris, 4 cols)
++-+
|+++
+++|
+-++
Output yang diharapkan: 6
Kasus 3, Grafik:
( 55 px * 40 px), ASCII: ( 8 baris, 11 cols)
+++--+
+-+++ |
| | ++--+
+--+--++ ++
| ||
| ||
++ +--++
++
Output yang diharapkan: 9
Kasus 4, Grafik:
( 120 px * 65 px), ASCII: ( 13 baris, 24 cols)
+--+--+ +--+ +--+ +--+
| | | | | | | | |
+--+--+ | | | | | |
| | | +--+--+--+--+--+
+--+--+ | | | |
| | | | ++
+-+-+-+-+ +--+ +--+ ++
| | | | |
+-+-+-+-+-+-+-+-+-+-+-+
| | | | | | | | | | | |
+-+-+-+-+-+-+-+-+-+-+-+
| | | | | | | | | | | |
+-+-+-+-+-+-+-+-+-+-+-+
Output yang diharapkan: 243
Kasus 5, Graphic:
( 5 px * 5 . Px Ya, itu adalah di sana!), ASCII: Hanya satu ruang.
Output yang diharapkan: 0
Kasus 6, Grafik:
( 35 px * 20 px), ASCII: ( 4 baris, 7 cols)
+--+--+
|++|++|
|++|++|
+--+--+
Output yang diharapkan: 5
Asumsi
Untuk membuat hidup lebih mudah, Anda dijamin bahwa:
- Dengan menjadi non-toroidal , kisi tidak membungkus secara horizontal atau vertikal.
- Tidak ada ujung yang longgar, misalnya
+---atau+- -+. Semua segmen garis memiliki dua ujung. - Dua garis yang bertemu
+harus berpotongan satu sama lain pada saat itu. - Anda tidak perlu khawatir tentang input yang tidak valid.
Aturan terhadap celah standar berlaku. Harap perlakukan kotak sebagai persegi panjang. Secara opsional, Anda bisa menghapus spasi tambahan di setiap baris kisi.
Ini adalah kode-golf , jadi buat entri Anda sesingkat mungkin. Solusi berbasis teks dan grafis akan bersaing bersama.
