루프 내부 찾기


14

직무

루프의 ASCII 다이어그램이 주어짐

예 :

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

그리고 루프의 위치

예 :

(7,1)

루프 내부와 외부를 찾아야합니다

예 :

00000000000000000000
00000011111000000000
00000011111000000000
00000111111111100000
00001111111111100000
00001111111111100000
00001111111111000000
00000000000000000000
00000000000000000000

명세서

  • 다이어그램의 입력을 줄 바꿈 또는 이와 동등한 것으로 구분 된 문자열로 사용할 수 있습니다.

  • 입력의 일부로 루프 (0 또는 1 색인)에 좌표를받습니다. 당신은 당신이 원하는 곳에서 원산지를 배치 할 수 있습니다. 이 좌표를 (<row>, <column>)에서 (<column>, <row>)또는 문자열의 선형 위치로 사용할 수 있습니다 . 이러한 데이터는 합리적인 방법으로받을 수 있습니다. 루프의 모든 문자는 해당 색인의 문자와 동일합니다.

  • 바람직한 출력하지만, 문자열 및 truthy falsy 값들의 2 차원 배열 10바꿈 또는 둘 이상이 없는지 등가 접수하여 분리 하였다. 내부와 외부는 서로 다른 진실 가치를 가져야하지만 어느 것이 중요하지는 않습니다.

  • 루프는 문자 그룹으로 정의되므로 문자는 모두 같은 문자 ( 예 :)@ 이며 루프의 모든 문자 는 동일한 문자 만 통과하는 원래 문자 (입력 좌표의 문자)에 대한 경로를 갖습니다. 문자 (택시 지오메트리 없음 대각선 ).

  • 내부는 모든 루프 자체와 루프를 건너지 않고 다이어그램의 가장자리에 도달 할 수없는 위치입니다.

  • 외부는 다른 곳에 있습니다

  • 이것은

테스트 사례

PasteBin


문자열에서 좌표를 선형 좌표로 사용할 수 있습니까?
flawr

@flawr 당신은 할 수 있습니다.
Post Rock Garf Hunter

다이어그램을 문자 행렬 sth로 취할 수 있습니까? [['.', '.'],['.', '@']]줄 바꿈이있는 문자열 대신 처럼 ?
hbaderts

@hbaderts 그것은 명백한 동등한 것입니다
Post Rock Garf Hunter

1
@WheatWizard 추가 테스트 사례에 감사드립니다! 그러나 도전을 좀 더
어수선

답변:


6

MATLAB, 163159146 78 바이트

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')

-66 바이트에 대한 @ rahnema1 감사합니다 !!!

지금은 작동 합니다 온라인 사용해보십시오! 그러나 MATLAB과 Octave는 완전히 호환되지 않으므로 약간의 조정이 필요했습니다.

설명

먼저 초기 문자와 동일한 모든 문자를 마스킹하는 이진 이미지를 만듭니다. 그런 다음 초기 문자가있는 연결된 구성 요소를 결정합니다.

% 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

그런 다음 연결된 구성 요소의 이미지를 만들고 이미지의 모든 "구멍"을 채 웁니다.

m=bwfill(m,'h')

나는 골프를
타기

@ rahnema1 이미 MATLAB에서 시작 했으므로 지금이 제출물을 변경하지는 않겠지 만 제안에 감사드립니다. =)
flawr

5

MATLAB : 67 바이트

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

몇 가지주의 사항 :

  • A 문자 배열로 가정합니다.
  • MATLAB의 인덱스는 1부터 시작하며 행이 먼저 인덱스됩니다. 이러한 변경은 함수 입력에 대해 수행 된 것으로 가정합니다 (예 : 질문 예는output = f(A,2,8) ).
  • bwlabelimfill이미지 처리 도구 상자의 일부입니다.

1
codegolf에 오신 것을 환영합니다!
rahnema1 2012 년

@ rahnema1 :이 사이트가 태어나 기 전에 SO에서 골프를했기 때문에 더 빨리 방문하지 않았다는 사실에 놀랐습니다.
gnovice
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.