Composants connectés 3x3

9

Le défi

Considérez la grille principale 3x3, comme indiqué dans le graphique ASCII suivant:

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

On vous donne en entrée une liste d'entiers de longueur 9 qui représentent un étiquetage des nœuds. Par exemple, l'entrée [0,1,1,2,1,0,5,5,1]représente l'étiquetage suivant:

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

Votre sortie est l'ensemble d'entiers dans l'entrée qui forment des ensembles de nœuds connectés. Plus explicitement, la sortie devrait contenir un entier nde l'entrée si et seulement si l'ensemble de nœuds avec étiquette nest connecté. Dans cet exemple, une sortie acceptable serait [1,2,5], car les deux 0s ne sont pas connectés. Le nombre d'octets le plus bas gagne.

Règles détaillées

  • Vous pouvez choisir un ordre fixe pour les nœuds dans votre liste d'entrée, et vous devez l'indiquer dans votre réponse. Dans l'ordre EFBDHCAGI, l'étiquetage ci-dessus serait donné comme [1,0,1,2,5,1,0,5,1].
  • Vous pouvez écrire soit un programme complet soit une fonction. Dans ce dernier cas, la sortie peut être un ensemble d'entiers si votre langue les prend en charge.
  • La liste de sortie peut contenir des doublons, mais sa longueur ne doit pas dépasser 9.
  • Les failles standard ne sont pas autorisées.

Cas de test

Ceux-ci ont des nombres à un chiffre alignés sur la grille; ajustez-les à votre commande choisie.

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
la source

Réponses:

4

J, 54 octets

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

Une fonction prenant une liste dans l'ordre ABCDEFGHI.


Étant donné une matrice d'adjacence A d'un graphe d'ordre n , le graphe est connecté si et seulement si toutes les entrées de ( A + I ) n sont non nulles, où I est la matrice d'identité n × n .

Nous commençons avec la matrice (fixe) d'adjacence plus identité de la grille de roi 3 × 3 (dans l'ordre ABCDEFGHI), à savoir:

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

. Pour chaque étiquette l, nous sélectionnons les lignes et colonnes correspondant aux nœuds d'étiquette l. Cela nous donne la matrice d'adjacence plus identité du sous-graphe des lnœuds étiquetés. Nous utilisons ensuite cette matrice pour tester si le sous-graphique est connecté, comme décrit ci-dessus.

Nous construisons la matrice ci-dessus en notant que si nous laissons

    0 0 0
Z = 0 0 0
    0 0 0

et

    1 1 0
O = 1 1 1
    0 1 1

, la matrice peut être considérée comme la matrice de blocs 3 × 3

O O Z
O O O
Z O O

, qui a le même motif que O! Oest produit en répétant le motif 1 1 0 1dans un bloc 3 × 3.

Aune
la source
Ceci est une solution incroyable! Avec le recul, les matrices d'adjacence sont probablement le moyen le plus court de le faire, en particulier avec un langage comme J.
Zgarb
3

CJam, 56 67 octets

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

Ordre: CIGABFHDE.

Exemple d'entrée:

[1 1 5 0 1 0 5 2 1]

Production:

[1 2 5]

Il supprime d'abord les numéros dans les coins qui sont les mêmes que les numéros connectés sur les côtés. Ensuite, il supprime les numéros sur les côtés qui sont les mêmes que les numéros sur les côtés suivants. Enfin, il supprime tous les numéros survenus deux fois ou plus et ajoute le numéro central.

jimmy23013
la source
2

CJam, 90 octets

Ceci est basé sur un remplissage par inondation itératif expliqué ici et peut être joué beaucoup au golf!

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

Nécessite l'entrée dans l'ordre ABCDEFGHcomme:

[0 1 1 2 1 0 5 5 1]

et la sortie est les nœuds connectés:

[1 1 2 1 5 5 1]

Brève explication

  • Tout d'abord, j'itère le tableau d'entrée pour chaque étiquette.
  • À chaque itération, j'effectue un floodfill pour comprendre les nœuds déconnectés.
  • Si le nombre de nœuds déconnectés est supérieur à 1, cette étiquette est déconnectée.
    • 1 car une étiquette ne peut avoir qu'une seule occurrence dans le tableau d'entrée également.
  • Ensuite, je filtre simplement les étiquettes déconnectées et j'imprime le tableau.

Explication complète à suivre

Essayez-le en ligne ici

Optimiseur
la source