Temukan bagian dalam Loop


14

Tugas

Diberikan diagram ASCII dari loop

misalnya

....................
......@@@@@.........
......@...@.........
.....@@...@@@@@.....
....@@........@.....
....@........@@.....
....@@@@@@@@@@......
....................
....................

Dan lokasi di loop

misalnya

(7,1)

Anda harus menemukan bagian dalam dan luar loop

misalnya

00000000000000000000
00000011111000000000
00000011111000000000
00000111111111100000
00001111111111100000
00001111111111100000
00001111111111000000
00000000000000000000
00000000000000000000

Spesifikasi

  • Anda dapat mengambil input untuk diagram sebagai string yang dipisahkan oleh baris baru atau yang jelas setara

  • Anda akan menerima koordinat pada loop (0 atau 1 diindeks) sebagai bagian dari input Anda. Anda dapat menempatkan asal Anda di tempat yang Anda inginkan. Anda dapat mengambil koordinat ini (<row>, <column>), (<column>, <row>)atau sebagai posisi linier pada string. Anda dapat menerima data ini dengan metode apa pun yang wajar. Semua karakter pada loop akan sama dengan karakter pada indeks itu.

  • Output yang disukai adalah array 2 dimensi dari nilai-nilai kebenaran dan falsy, namun string 1dan 0dipisahkan oleh baris baru atau apa pun yang jelas setara dari dua kemudian diterima. Di dalam dan di luar harus memiliki nilai kebenaran yang berbeda tetapi tidak masalah yang mana.

  • Sebuah loop didefinisikan sebagai sekelompok karakter sehingga mereka semua karakter yang sama ( misalnya@ ) dan sehingga setiap karakter dalam loop memiliki jalur ke karakter asli (Karakter pada koordinat input) yang hanya melewati yang sama karakter (geometri Taxicab No diagonal ).

  • Bagian dalam adalah semua loop itu sendiri dan tempat-tempat yang tidak dapat mencapai tepi diagram tanpa melewati loop.

  • Di luar ada tempat lain

  • Ini adalah

Uji Kasus

PasteBin


Bisakah kita juga mengambil koordinat sebagai koordinat linier dalam string?
flawr

@ flawr Anda mungkin.
Post Rock Garf Hunter

Apakah kita diizinkan untuk mengambil diagram sebagai matriks karakter, sth. suka [['.', '.'],['.', '@']]bukannya string dengan baris baru?
hbaderts

@hbaderts Itu adalah padanan yang jelas
Post Rock Garf Hunter

1
@WheatWizard Terima kasih untuk test case tambahan! Namun saya akan merekomendasikan untuk memasukkan mereka ke dalam potongan atau di intisari / pastebin, untuk membuat tantangan sedikit lebih
dideklarasikan

Jawaban:


6

MATLAB, 163 159 146 78 byte

function m=f(m,y,x);[~,i]=bwfill(m~=m(y,x),x,y,8);m=m*0;m(i)=1;m=bwfill(m,'h')

Terima kasih @ rahnema1 untuk -66 byte !!!

Sekarang berhasil di Coba online! TETAPI beberapa penyesuaian diperlukan, karena MATLAB dan Oktaf tidak sepenuhnya kompatibel.

Penjelasan

Pertama kita membuat gambar biner yang hanya menutupi semua karakter yang sama dengan karakter awal. Kemudian kita menentukan komponen yang terhubung dengan karakter awal.

% determine the connected component that is contains initial character

[~,i]=bwfill(m~=m(y,x),x,y,8);     % i contains the indices of the connected component
m=m*0;m(i)=1;                      % create an image of the connected component

Setelah itu kami membuat gambar dari komponen yang terhubung dan menerapkan mengisi semua "lubang" di gambar.

m=bwfill(m,'h')

Saya pikir untuk bermain golf Oktaf lebih baik sehingga Anda dapat menguranginya menjadi setidaknya 72 byte
rahnema1

@ rahnema1 Saya sudah mulai di MATLAB, jadi saya tidak akan mengubah kiriman ini sekarang, tapi terima kasih atas sarannya =)
flawr

5

MATLAB: 67 byte

function A=f(A,r,c),A=bwlabel(A==A(r,c),4);A=imfill(A==A(r,c),'h');

Beberapa peringatan:

  • A diasumsikan sebagai array karakter.
  • Indeks dalam MATLAB berbasis 1, dengan baris diindeks terlebih dahulu. Diasumsikan bahwa perubahan ini akan dilakukan pada input fungsi (yaitu contoh pertanyaan akan disebut sebagaioutput = f(A,2,8) ).
  • bwlabeldan imfillmerupakan bagian dari Toolbox Pemrosesan Gambar.

1
selamat datang di codegolf!
rahnema1

@ rahnema1: Kagum saya tidak mengunjungi lebih cepat, karena saya bermain golf di SO sebelum situs ini lahir.
gnovice
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.