Componentes conectados 3x3

9

O desafio

Considere a grade king 3x3, conforme mostrado no gráfico ASCII a seguir:

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

Você recebe como entrada uma lista comprimento-9 de números inteiros que representam uma identificação dos nós. Por exemplo, a entrada [0,1,1,2,1,0,5,5,1]representa a seguinte rotulagem:

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

Sua saída é o conjunto de números inteiros na entrada que formam conjuntos de nós conectados. Mais explicitamente, a saída deve conter um número inteiro nda entrada se e somente se o conjunto de nós com rótulo nestiver conectado. Neste exemplo, uma saída aceitável seria [1,2,5], pois os dois 0s não estão conectados. A menor contagem de bytes vence.

Regras detalhadas

  • Você pode escolher uma ordem fixa para os nós na sua lista de entrada e deve declarar isso na sua resposta. Na ordem EFBDHCAGI, a rotulagem acima seria dada como [1,0,1,2,5,1,0,5,1].
  • Você pode escrever um programa completo ou uma função. No último caso, a saída pode ser um conjunto de números inteiros se o seu idioma suportar esses.
  • A lista de saída pode conter duplicatas, mas seu comprimento não deve exceder 9.
  • As brechas padrão não são permitidas.

Casos de teste

Eles possuem números de um dígito alinhados à grade; ajuste-os à ordem escolhida.

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
Zgarb
fonte

Respostas:

4

J, 54 bytes

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

Uma função que faz uma lista na ordem ABCDEFGHI.


Dada uma matriz de adjacência Um de um gráfico de ordem n , o gráfico está ligado se e apenas se todas as entradas de ( A + I ) n é diferente de zero, em que I é a N × n matriz identidade.

Começamos com a matriz (fixa) de adjacência mais identidade da grade rei 3 × 3 (na ordem 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

. Para cada rótulo l, selecionamos as linhas e colunas correspondentes aos nós do rótulo l. Isso nos fornece a matriz adjacência-mais-identidade do subgrafo de lnós -labeled. Em seguida, usamos essa matriz para testar se o subgráfico está conectado, conforme descrito acima.

Construímos a matriz acima observando que, se permitirmos

    0 0 0
Z = 0 0 0
    0 0 0

e

    1 1 0
O = 1 1 1
    0 1 1

, então a matriz pode ser vista como a matriz de bloco 3 × 3

O O Z
O O O
Z O O

, que tem o mesmo padrão que O! Oé produzido repetindo o padrão 1 1 0 1em um bloco 3 × 3.

Ell
fonte
Esta é uma solução incrível! Em retrospectiva, as matrizes de adjacência são provavelmente a maneira mais curta de fazer isso, especialmente com uma linguagem como J.
Zgarb
3

CJam, 56 67 bytes

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

Ordem: CIGABFHDE.

Exemplo de entrada:

[1 1 5 0 1 0 5 2 1]

Resultado:

[1 2 5]

Em primeiro lugar, remove números nos cantos que são iguais aos números conectados nas laterais. Em seguida, ele remove números nos lados que são iguais aos números nos lados seguintes. Finalmente, ele remove todos os números ocorridos duas ou mais vezes e adiciona o número do centro.

jimmy23013
fonte
2

CJam, 90 bytes

Isso é baseado em um preenchimento de inundação iterativo explicado aqui e pode ser jogado muito!

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

Requer a entrada na ordem de ABCDEFGH:

[0 1 1 2 1 0 5 5 1]

e saída são os nós conectados:

[1 1 2 1 5 5 1]

Breve explicação

  • Primeiro, eu itero sobre a matriz de entrada para cada rótulo.
  • Em cada iteração, eu executo o floodfill para descobrir nós desconectados.
  • Se o número de nós desconectados for maior que 1, esse rótulo será desconectado.
    • 1 porque um rótulo também pode ter apenas 1 ocorrência na matriz de entrada.
  • Depois, basta filtrar as etiquetas desconectadas e imprimir a matriz.

Explicação completa a seguir

Experimente online aqui

Optimizer
fonte