Deskripsi tantangan
Mari kita sebut array dua dimensi, persegi panjang (artinya setiap subarray memiliki panjang yang sama), sebuah kisi . Setiap unit kisi adalah ruang kosong atau perbatasan . Dalam kotak karakter, ruang kosong diwakili oleh spasi tunggal; karakter lain diperlakukan sebagai perbatasan. Kisi sampel ( +
's, |
' dan -
'ditambahkan agar mudah dibaca - mereka bukan bagian dari kisi ):
+----+
| |
| |
| |
| |
| |
+----+ an empty 4x5 grid
+------+
| |
| # |
| # |
+------+ a 6x3 grid with 2 borders
+----------+
| |
| |
| ##### |
| # # |
| ## # <------ enclosed area
| # # |
| ###### |
| |
+----------+ a 10x8 grid with an enclosed area
Diberi kisi 2D dan sepasang koordinat, isi area tertutup di sekitar titik yang diwakili oleh koordinat.
Input / output sampel
1)
0 0
+----------+ +----------+
| | |XXXXXXXXXX|
| | -> |XXXXXXXXXX|
| | |XXXXXXXXXX|
+----------+ +----------+
2)
6 5
+-----------------+ +-----------------+
| | | |
| | | |
| ######## | | ######## |
| # # | | #XXXXXXX# |
| # #### | | #XXXX#### |
| # # | | #XXXX# |
| # # | -> | #XXXX# |
| # # | | #XXXX# |
| #### | | #### |
| | | |
| | | |
+-----------------+ +-----------------+
3)
4 6
+-----------------+ +-----------------+
| | |XXXXXXXXXXXXXXXXX|
| #### | |XXXX####XXXXXXXXX|
| # # | -> |XXX# #XXXXXXXX|
| #### | |XXXX####XXXXXXXXX|
| | |XXXXXXXXXXXXXXXXX|
+-----------------+ +-----------------+
4)
4 5
+-----------------+ +-----------------+ +-----------------+
| | | | | |
| | | | | |
| #### | | #### | | XXXX |
| #### | -> | #### | or | XXXX |
| #### | | #### | | XXXX |
| | | | | |
+-----------------+ +-----------------+ +-----------------+
5)
2 6
+----------------+ +----------------+
| | |XXXXXXXXXXXXXXXX|
| | |XXXXXXXXXXXXXXXX|
| | |XXXXXXXXXXXXXXXX|
| | -> |XXXXXXXXXXXXXXXX|
| | |XXXXXXXXXXXXXXXX|
|BBBBBBBBBBBBBBBB| |BBBBBBBBBBBBBBBB|
| | | |
| | | |
+----------------+ +----------------+
Catatan
Grid kosong dianggap tertutup, yaitu batas secara implisit terletak di sepanjang tepi grid juga (lihat contoh 1. dan 5.),
Sudut area tertutup tidak harus berbentuk L. Oleh karena itu dua area berikut ini setara:
#### ##
# # # #
# # == # #
# # # #
#### ##
Jika unit di bawah koordinat kebetulan merupakan perbatasan Anda dapat membiarkan grid tidak berubah (seperti pada contoh 4.) atau memperlakukannya sebagai ruang kosong,
Anda dapat memilih karakter apa pun untuk pengisi / ruang kosong selama Anda memasukkan informasi ini dalam kiriman,
Jika menggunakan jenis selain yang
char
sesuai dengan tujuan Anda dengan lebih baik, Anda dapat menggunakanints
(0
untuk ruang kosong,1
untuk perbatasan) ataubooleans
(true
danfalse
masing - masing) atau jenis lainnya - pastikan untuk memasukkan informasi ini dalam kiriman Anda,Koordinat yang digunakan dalam contoh di atas adalah
(row, column)
koordinat berindeks 0 , karena lebih nyaman untuk array dua dimensi. Jika Anda ingin menggunakan(column, row)
sistem (kartesius) dan / atau koordinat non-0-diindeks, tentukan dalam kiriman Anda.Jika Anda tidak tahu harus mulai dari mana, lihat artikel Wikipedia tentang banjir
Ingat bahwa ini adalah tantangan kode-golf , jadi buat kode Anda sesingkat mungkin!
sumber
Jawaban:
MATLAB,
307 byteKarena kita dapat menggunakan input logis alih-alih string, kita dapat menggunakan fungsi bare, seperti:
Ini adalah fungsi anonim. Untuk penggunaannya, kita harus mengasumsikan nama, mis
f=@
imfill
. Kemudian kita bisa mengevaluasinya sebagaif(input,point)
, di manainput
ada matriks logis, misalnya[0,0;0,1]
, danpoint
merupakan vektor 2d dengan koordinat berbasis 1, misalnya[1,2]
.Versi lama mengerjakan string:
Fungsi anonim ini menerima input serta vektor dengan koordinat (indeks berbasis 1). Fungsi
imfill
tidak persis apa yang kita butuhkan, tetapi hanya beroperasi pada gambar biner. Itulah sebabnya kami mengonversi matriks input ke array logis (di mana#
batas-batasnya, dan(spasi) kosong), melakukan pengisian dan kemudian dikonversi kembali. (lagi
#
diisi, ruang tidak diisi).Terima kasih @LuisMendo untuk -
1byte.sumber
~=32
dengan>32
C, 162 byte
Mengambil input dari argumen (
./floodfill X Y grid
). Kisi harus berisi\n
atau di\r\n
antara setiap baris, baris baru final adalah opsional. Cara paling sederhana yang saya temukan untuk memanggil dari shell:Output ke stdout, gunakan
!
untuk karakter isian. Jika posisi awal bertepatan dengan a#
, tidak membuat perubahan.Kerusakan:
Perhatikan bahwa ini bergantung pada modifikasi string argumen input, yang dilarang, jadi ini mungkin tidak berfungsi pada semua platform (deklarasi implisit juga menjadikan ini non-standar).
sumber
int w, l;
hanyaw, l;
- gcc default untukint
mengetikC -
263247240238 byteIni adalah versi ketiga
keduapertama, saya percaya kode dapat menyusut juga.Dan versi yang dapat dibaca:
Kompilasi dan jalankan:
gcc -o flood floodgolf.c && cat 1.txt | ./flood
Sumber:
Catatan: Saya sedang mengerjakan
int
nilai. Setiap(32) diperlakukan sebagai ruang kosong. Nilai lain dianggap sebagai batas. Koordinat dalam format
(row, column)
sumber
for
(discanf
sini), dan menggunakan parameter utama pertama sebagai deklarasi int murah akan bekerja di sebagian besar kompiler. Anda juga mungkin bisa menghemat sedikit dengan meratakan susunan Anda (pasti akan membantu lingkaran cetak)Python 2, 158 byte
Cobalah online . Solusi rekursif sederhana
0-diindeks dalam urutan kolom-baris
1 - ruang kosong, ruang 0-diisi
Mengambil input sebagai array array 1 dan 0, dan dua angka
sumber
Perl 5 , 129 + 1 (-a) = 130 byte
Cobalah online!
Bagaimana?
sumber