找到循环的内部


14

任务

给定循环的ASCII图

例如

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

和循环上的位置

例如

(7,1)

您必须找到循环的内部和外部

例如

00000000000000000000
00000011111000000000
00000011111000000000
00000111111111100000
00001111111111100000
00001111111111100000
00001111111111000000
00000000000000000000
00000000000000000000

技术指标

  • 您可以将图表的输入作为由换行符或明显等效的字符串分隔

  • 作为输入的一部分,您将在循环上收到一个坐标(0或1索引)。您可以将自己的血统放在任何您想要的地方。您可以借此协调(<row>, <column>)(<column>, <row>)或弦上的线性位置。您可以通过任何合理的方式接收这些数据。循环上的所有字符将与该索引处的字符相同。

  • 优选的输出是truthy和falsy值的2维阵列,但是串10通过换行或后两种的任何明显的等效接受分离。内部和外部必须具有不同的真相值,但这与哪个无关紧要。

  • 循环被定义为一组字符,以使它们全部是相同的字符(例如@),从而循环中的每个字符都具有到原始字符(输入坐标处的字符)的路径,该路径仅通过相同的字符字符(出租车几何图形没有对角线)。

  • 内部是所有循环本身,以及不跨越循环就无法到达图边缘的位置。

  • 外面无处不在

  • 这是

测试用例

粘贴框


我们还可以将坐标作为字符串中的线性坐标吗?
瑕疵

@flawr你可以。
发布Rock Garf Hunter,

我们是否可以将图表作为字符矩阵,等等。喜欢[['.', '.'],['.', '@']]而不是带有换行符的字符串?
hbaderts

@hbaderts这显然是等效的
Post Rock Garf Hunter

1
@WheatWizard感谢您的额外测试用例!不过,我会建议把它们放入一个片段或在要点/引擎收录,为了使这一挑战多一点decluttered =)
flawr

Answers:


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

感谢@ rahnema1 -66字节!!!

现在,它可以在网上试用!但是需要进行一些调整,因为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')

我认为打高尔夫球的八度音更好,因此您可以将其减少到至少72个字节
rahnema1

@ rahnema1我已经开始使用MATLAB,所以现在我不打算更改此提交,但是感谢您的建议=)
瑕疵的

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))。
  • bwlabel并且imfill是“图像处理工具箱”的一部分。

1
欢迎来到codegolf!
rahnema17年

@ rahnema1:很惊讶我没来得及参观,因为我是在这个网站诞生之前在SO上打高尔夫球的。
gnovice
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.