Latar Belakang
Saya memiliki banyak gambar hitam-putih tua dan kasar. Beberapa dari mereka menggambarkan tanaman merambat memanjat di dinding, yang lain tidak - tugas Anda adalah mengklasifikasikannya untuk saya.
Masukan dan keluaran
Input Anda adalah array 2D persegi panjang dari bit A , diberikan dalam format apa pun yang nyaman. Tidak akan kosong, tetapi tidak dijamin mengandung 0s dan 1s. Array menggambarkan sulur jika kondisi berikut ini berlaku:
- Baris bawah A mengandung setidaknya satu 1. Ini adalah akar dari pokok anggur.
- Setiap 1 dalam A terhubung ke baris bawah dengan jalur 1s yang hanya bergerak ke kiri, kanan dan bawah (tidak naik, dan tidak secara diagonal). Jalan-jalan ini adalah cabang-cabang dari pokok anggur.
Output Anda adalah nilai kebenaran yang konsisten jika input menggambarkan anggur, dan nilai palsu yang konsisten sebaliknya.
Contohnya
Array ini menggambarkan sulur:
0 0 1 0 0 1
0 1 1 0 0 1
0 1 0 1 1 1
1 1 0 1 0 1
0 1 1 1 0 1
0 0 1 0 1 1
Input ini tidak menggambarkan anggur, karena ada 1 di tengah perbatasan kanan yang tidak terhubung ke akar oleh cabang:
0 0 0 1 1 0
0 1 0 1 1 1
0 1 0 1 0 1
0 1 1 1 1 0
0 0 1 1 0 1
Semua-0 array tidak pernah menggambarkan anggur, tetapi semua-1 array selalu.
Aturan dan penilaian
Anda dapat menulis program atau fungsi lengkap. Hitungan byte terendah menang, dan celah standar tidak diizinkan.
Uji kasus
Masukan yang benar:
1
0
1
1
01
11
0000
0111
1100
1001
1111
1111
1111
1111
001001
011001
010111
110101
011101
001011
1011011
1001001
1111111
0100000
0111111
1111001
1001111
1111101
0000000
0011100
0010100
0011100
0001000
1111111
0001000
0011100
0010100
0010100
Masukan palsu:
0
1
0
10
01
000
000
000
011
110
000
111111
000000
101011
111001
010010
001000
000010
110001
001100
111111
110101
010011
111011
000110
010111
010101
011110
001101
11000000
10110001
10011111
11110001
01100011
00110110
01101100
01100001
01111111
sumber
Jawaban:
Siput ,
251917 byteCobalah online!
Penjelasan
Snails adalah bahasa pencocokan pola 2D yang terinspirasi oleh regex, yang awalnya dikembangkan untuk tantangan desain bahasa pencocokan pola 2D kami .
Para
&
siput membuat mencoba pola dari setiap posisi awal yang mungkin dan mencetak0
atau1
tergantung pada apakah pola gagal di salah satu dari mereka atau cocok dengan semuanya.Sekarang siput dapat bekerja dengan tanda kurung implisit, jadi polanya adalah singkatan untuk yang berikut ini:
The
,
bertindak seperti*
di regex (yaitu cocok dengan nol atau lebih kali), sedangkan+
adalah sama seperti di regex (mencocokkan satu atau lebih kali). Jadi kita mulai dengan mencocokkan\0z
sesering yang diperlukan, yang cocok dengan satu0
dan kemudian memungkinkan siput untuk mengatur ulang arahnya secara sewenang-wenangz
. Ini memungkinkan nol di input, asalkan sel anggur yang valid dapat ditemukan di tempat lain.Kemudian kami mencocokkan setidaknya satu
\1dlr
, yang cocok dengan satu1
dan kemudian memungkinkan siput untuk mengatur ulang arahnya ke bawah, kiri atau kanan. Perhatikan bahwa jika sel tempat kita memulai mengandung1
maka kita hanya cocok dengan bagian ini. Ini pada dasarnya memungkinkan siput untuk melintasi pohon anggur dari cabang ke akar.Akhirnya, kita perlu memastikan bahwa kita benar-benar mencapai tanah dengan mencari sel di luar batas (
~
) di bawah (d
).sumber
JavaScript (ES6), 135 byte
Catatan: Karena keterbatasan tipe bilangan bulat, hanya berfungsi untuk tanaman merambat hingga 31 karakter. Penjelasan: Setiap baris bit ANDed dengan baris yang berdekatan untuk menentukan titik koneksi, dan kemudian
g
fungsi ini digunakan untuk memperluas baris secara horizontal sampai tidak dapat berkembang lagi. Misalnya, jika dua baris yang berdekatan adalah1110111
dan1011100
kemudian titik koneksi1010100
dan ini kemudian diperluas ke1110110
dan1110111
yang kemudian menemukan bahwa baris terhubung. Jikag
fungsi gagal maka mengembalikan nol yang menyebabkan semuag
fungsi berikutnya gagal juga, dan hasilnya kemudian palsu. Jikag
fungsi berhasil mengembalikan baris baru yang kemudian disebarkan melaluireduce
untuk menguji baris berikutnya.sumber
Python 2, 254 byte
Tidak ada perpustakaan
Perhatikan bahwa indentasi tingkat kedua dan ketiga dibentuk dengan tab pada jumlah byte.
Cobalah online
sumber
Wolfram - 254
Luangkan waktu untuk membuat pekerjaan ini, jadi saya akan meninggalkannya di sini:
Pada dasarnya saya membuat grafik grid dengan ujung terarah mengarah ke atas, menghapus simpul yang sesuai dengan 0s, memeriksa apakah komponen simpul bawah mengandung semua simpul. Konyol, saya tahu ...
sumber
Python + NumPy
204202195 BytesDiharapkan
A
menjadi array numpy 2D.Membawa matriks, bantalan nol kolom kiri dan kanan dan ratakan matriks.
s
adalah stensil yang menunjuk ke elemen kiri, kanan dan bawah. Loop memeriksa setiap elemen kecuali baris terakhir jika itu1
dan setidaknya salah satu stensilnya adalah1
, mengembalikanFalse
sebaliknya. Setelah itu, periksa apakah baris terakhir berisi1
.Dua testcases untuk Anda:
Sunting1:
1<0
lebih pendek dariFalse
Sunting2:
flat
adalah alternatif yang baik untukflatten()
dan menggunakan tabulator untuk maksud kedua dalam loopsumber