3x3 연결 부품


9

도전

다음 ASCII 그래픽에 표시된대로 3x3 킹 그리드를 고려하십시오.

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이있는 노드 세트 가 연결된 경우에만 입력 의 정수 를 포함해야합니다 . 이 예 [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

답변:


4

J, 54 바이트

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

순서대로리스트를받는 함수 ABCDEFGHI.


차수 n 의 그래프의 인접 행렬 A 가 주어지면, ( A + I ) n 의 모든 항목 이 0이 아닌 경우에만 그래프가 연결되며 , 여기서 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! 3 × 3 블록에서 O패턴을 반복함으로써 생성된다 1 1 0 1.


이것은 놀라운 해결책입니다! 뒤늦게 보면 인접 행렬은 아마도 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]

간단한 설명

  • 먼저 각 레이블의 입력 배열을 반복합니다.
  • 각 반복에서 연결이 끊긴 노드를 파악하기 위해 플러드 필을 수행합니다.
  • 연결이 끊어진 노드 수가 1보다 크면 해당 레이블의 연결이 끊어집니다.
    • 입력 배열에서도 레이블이 1 번만 발생할 수 있기 때문에 1입니다.
  • 그런 다음 연결이 끊긴 레이블을 간단히 필터링하여 배열을 인쇄합니다.

따라야 할 전체 설명

여기에서 온라인으로 사용해보십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.