3x3连接的组件


9

挑战

考虑3x3国王网格,如以下ASCII图形所示:

A--B--C
|\/|\/|
|/\|/\|
D--E--F
|\/|\/|
|/\|/\|
G--H--I

作为输入,您将获得一个长度9的整数列表,这些列表表示节点的标签。例如,输入[0,1,1,2,1,0,5,5,1]代表以下标签:

0--1--1
|\/|\/|
|/\|/\|
2--1--0
|\/|\/|
|/\|/\|
5--5--1

您的输出是输入中形成连接的节点集的整数集。更明确地说,n当且仅当n连接了带有label的节点集时,输出才应包含输入的整数。在此示例中,可接受的输出为[1,2,5],因为两个0未连接。最低字节数获胜。

详细规则

  • 您可以为输入列表中的节点选择固定顺序,并且应该在答案中说明这一点。按照EFBDHCAGI的顺序,上述标签将指定为[1,0,1,2,5,1,0,5,1]
  • 您可以编写完整的程序或函数。在后一种情况下,如果您的语言支持,则输出可以是一组整数。
  • 输出列表可能包含重复项,但其长度不能超过9。
  • 不允许出现标准漏洞。

测试用例

这些具有与网格对齐的个位数;将它们调整为您选择的顺序。

011
210 => 1 2 5
551

010
202 => 0 2
221

110
123 => 0 2 3
221

111
111 => 1
111

111
141 => 1 4
111

Answers:


4

J,54个字节

#~3 :'0<*/,+/ .*/^:8~y#|:y#,/,"1/({0&,:)3 3$#:13'"1@e.

按顺序列出列表的功能ABCDEFGHI


给定阶n的图的邻接矩阵A,则当且仅当(A + In的所有条目都不为零(其中In × n单位矩阵)时,才可以连接该图。

我们从3×3国王网格(按顺序ABCDEFGHI)的(固定)邻接加恒等矩阵开始,即:

1 1 0 1 1 0 0 0 0
1 1 1 1 1 1 0 0 0
0 1 1 0 1 1 0 0 0
1 1 0 1 1 0 1 1 0
1 1 1 1 1 1 1 1 1
0 1 1 0 1 1 0 1 1
0 0 0 1 1 0 1 1 0
0 0 0 1 1 1 1 1 1
0 0 0 0 1 1 0 1 1

。对于每个标签l,我们选择与标签节点相对应的行和列l。这为我们提供了l标记节点的子图的邻接加身份矩阵。然后,如上所述,我们使用此矩阵测试子图是否已连接。

我们通过注意如果让

    0 0 0
Z = 0 0 0
    0 0 0

    1 1 0
O = 1 1 1
    0 1 1

,那么矩阵可以看成是3×3块矩阵

O O Z
O O O
Z O O

,具有与O!相同的模式! O通过1 1 0 1在3×3块中重复图案来产生图像。


这是一个了不起的解决方案!现在回想起来,邻接矩阵是可能做到这一点,尤其是像J.语言的最短途径
Zgarb

3

CJam,56 67字节

q~4/~\@{a1$2<-\(+}%)_)-{_(+{\(a@-\}}A?%+:+[$_(d+1$)c\+@]zLf|2f>:+|`

订单:CIGABFHDE

输入示例:

[1 1 5 0 1 0 5 2 1]

输出:

[1 2 5]

首先删除与边上连接数字相同的角上的数字。然后,它会删除与下一个侧面相同的侧面上的数字。最后,它删除所有两次或更多次出现的数字并添加中心数字。


2

CJam,90个字节

这是基于此处解释的迭代洪水填充,可以打很多球!

q~:Q{:IQ3/S*Sca5*+:T;G,G*{:AT=1$={[WXZ5 4_~_)_)]Af+Tf=AT='#a+&,g{TA'#t:T;}*}*}%;aT\/,3<},p

需要按以下顺序输入ABCDEFGH

[0 1 1 2 1 0 5 5 1]

输出是连接的节点:

[1 1 2 1 5 5 1]

简要说明

  • 首先,我遍历每个标签的输入数组。
  • 在每次迭代中,我都执行Floodfill找出断开连接的节点。
  • 如果断开连接的节点数大于1,则该标签断开连接。
    • 1,因为标签在输入数组中也只能出现1次。
  • 然后,我只是过滤掉断开连接的标签并打印数组。

遵循完整的解释

在这里在线尝试

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.