Bayangkan sebuah array dua dimensi dari nilai boolean, di mana 0s mewakili kuadrat rumput pada sebidang tanah persegi panjang dan 1s mewakili pagar.
Tulis fungsi yang menerima array 2D sebagai input dan tentukan apakah Anda dapat melakukan perjalanan dari satu area rumput ke area rumput lainnya, hanya menggunakan gerakan utara / timur / barat / selatan, tanpa berlari ke pagar.
Jika ada area rumput dalam array sepenuhnya tertutup oleh pagar (artinya Anda tidak dapat melakukan perjalanan N / E / W / S untuk mencapai setiap area rumput lain dalam array) fungsi tersebut harus mengembalikan false; jika tidak, itu harus mengembalikan true.
Di bawah ini adalah dua array sampel yang dapat Anda gunakan sebagai input, meskipun fungsi Anda harus dapat menangani tidak hanya ini tetapi setiap array 2D nilai boolean:
0 0 0 0 0
0 1 0 0 0
0 1 1 1 1
0 0 0 0 0
0 0 0 1 1
(should return true)
0 1 0 1 0
0 1 1 0 0
0 0 0 0 0
0 0 0 1 0
1 1 1 1 0
(should return false, since the middle 0 in the top row is fully enclosed)
Kode kerja terpendek menang. Saya akan memilih pemenang setelah satu minggu berlalu atau tidak ada pengiriman baru dalam 24 jam.
1 1 1
;1 0 1
;1 1 1
? Ada satu sel rumput di tengah. Secara visual sel rumput di tengah sepenuhnya tertutup oleh pagar, tetapi menurut definisi Anda tidak.Jawaban:
Matlab 45
sumber
input('');c=bwconncomp(~ans,4);c.NumObjects<2
ini. Ini akan membuatnya menjadi 45 karakter.APL (39)
Pemakaian:
sumber
Mathematica,
6058 karakterPemakaian:
sumber
f=Max@WatershedComponents[Image@#,CornerNeighbors->1>2]<2&
Ruby,
202198193Apakah mengisi banjir, kemudian memeriksa untuk melihat apakah ada 0s yang tersisa.
sumber
PHP 147
202177165149byteEDIT Saya mengalahkan hack gzip saya dengan solusi php nyata.
Masukan agak panjang .... sebagai string teks, tanpa spasi, baris dibatasi oleh baris baru. Itu mengisi dengan
c
s dan kemudian memeriksa untuk melihat apakah ada nol yang tersisa. Dalam loop saya gunakanexp
sebagai batas atas mentah pada jumlah iterasi yang diperlukan. Saya memanfaatkan simetri untuk menangani kasus duplikat dalam kode yang lebih sedikitBerikut ini adalah test case yang tidak diserap:
sumber
Excel VBA,
305215 BytesYa, haha VBA , tetapi sifat matriks dari masalah ini menyarankan solusi praktis di Excel mungkin menarik (Plus seseorang telah mengirimkan jawaban dalam bahasa saya yang lain!). Jelas VBA tidak akan menjadi yang paling ringkas, tapi saya pikir itu masuk akal.
Banjir ini mengisi dari titik awal yang sewenang-wenang kemudian memeriksa apakah ada "rumput" yang tersisa
R adalah rentang lembar kerja dengan 1 dan 0 yang mewakili pagar dan rumput seperti yang didefinisikan dalam masalah. Bonus, lapangan bermain tidak harus persegi panjang atau berdekatan.
Misalnya akan mengembalikan False. Angka nol di sebelah kanan tidak dapat dijangkau dari angka nol di sebelah kiri. Bidang yang tidak teratur tidak merusaknya.
Beberapa catatan tentang golf.
Saya pikir beberapa karakter bisa dipangkas jika persyaratannya terbalik untuk 1 dan 0, tetapi tidak cukup untuk membuatnya layak dibalik.
VBA menekankan pada sekelompok spasi putih (a = b vs a = b), yang tidak membantu char menghitung.
S perlu dinyatakan secara eksplisit sebagai rentang. Jika dibiarkan varian, itu berubah menjadi nilai rentang daripada rentang.
Mungkin cara yang lebih baik untuk menabrak banjir? Saya tidak bisa membuat loop yang menyimpan karakter apa pun untuk mengirimnya N / E / S / W
Sunting: rethougt kasus dasar pada mengisi banjir, berhasil memangkas sedikit dengan memeriksa apakah itu pada kasus dasar setelah rekursi daripada mencegah rekursi.
sumber
Python (219 byte)
Jelas bukan yang terpendek, tapi ini adalah percobaan pertama saya di sini, jadi saya bangga akan hal itu:
Inputnya harus berupa String 0s & 1s di mana baris dibatasi oleh karakter baris baru (\ n).
Contoh penggunaan:
sumber
and
, saya pikir itu menghemat beberapa karakterPython (196)
Pengisian banjir standar.
Membawa matriks melalui STDIN dengan setiap baris dipisahkan oleh satu ruang. Misalnya "01010 01100 00000 00010 11110".
sumber
Mathematica 53
Ini memanggil fungsi internal
Image`MorphologicalOperationsDump`imageBinaryLabel
, yang mirip denganMorphologicalComponents
.sumber
PHP (286 karakter)
Terlalu lama, saya mungkin pergi jauh.
Non-golf:
sumber
C #, 235 Bytes
Mencoba mengisi semua sel di papan, itu membuat hanya satu isi banjir yang benar.
sumber
Python 2.X + 3.X: 335 karakter
Golf:
Tidak Disatukan:
sumber