Componenti collegati 3x3


9

La sfida

Considera la griglia del re 3x3, come mostrato nel seguente grafico ASCII:

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

Viene fornito come input un elenco di numeri interi di lunghezza 9 che rappresentano un'etichettatura dei nodi. Ad esempio, l'input [0,1,1,2,1,0,5,5,1]rappresenta la seguente etichettatura:

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

L'output è l'insieme di numeri interi nell'input che formano insiemi di nodi collegati. Più esplicitamente, l'output dovrebbe contenere un numero intero ndall'input se e solo se nè collegata la serie di nodi con etichetta . In questo esempio, sarebbe un output accettabile [1,2,5], poiché i due 0s non sono collegati. Vince il conteggio dei byte più basso.

Regole dettagliate

  • Puoi scegliere un ordine fisso per i nodi nell'elenco di input e dovresti indicarlo nella tua risposta. Nell'ordine EFBDHCAGI, l'etichettatura di cui sopra sarebbe data come [1,0,1,2,5,1,0,5,1].
  • È possibile scrivere un programma completo o una funzione. In quest'ultimo caso, l'output può essere un insieme di numeri interi se la tua lingua li supporta.
  • L'elenco di output può contenere duplicati, ma la sua lunghezza non deve superare 9.
  • Le scappatoie standard non sono ammesse.

Casi test

Questi hanno numeri a una cifra allineati alla griglia; adattali al tuo ordine scelto.

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

Risposte:


4

J, 54 byte

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

Una funzione che prende un elenco nell'ordine ABCDEFGHI.


Data una matrice di adiacenza A di un grafico dell'ordine n , il grafico è collegato se e solo se tutte le voci di ( A + I ) n sono diverse da zero, dove I è la matrice di identità n × n .

Iniziamo con la matrice (fissa) di adiacenza-più-identità della griglia del re 3 × 3 (nell'ordine ABCDEFGHI), vale a dire:

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

. Per ogni etichetta l, selezioniamo le righe e le colonne corrispondenti ai nodi dell'etichetta l. Questo ci dà la matrice di adiacenza più identità del sottografo dei lnodi con etichetta. Quindi utilizziamo questa matrice per verificare se il sottografo è collegato, come descritto sopra.

Costruiamo la matrice sopra notando che se lo lasciamo

    0 0 0
Z = 0 0 0
    0 0 0

e

    1 1 0
O = 1 1 1
    0 1 1

, quindi la matrice può essere vista come la matrice di blocchi 3 × 3

O O Z
O O O
Z O O

, che ha lo stesso modello di O! Oviene prodotto ripetendo il motivo 1 1 0 1in un blocco 3 × 3.


Questa è una soluzione straordinaria! Con il senno di poi, le matrici di adiacenza sono probabilmente il modo più breve per farlo, specialmente con un linguaggio come J.
Zgarb,

3

CJam, 56 67 byte

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

Ordina: CIGABFHDE.

Esempio di input:

[1 1 5 0 1 0 5 2 1]

Produzione:

[1 2 5]

In primo luogo rimuove i numeri negli angoli che sono gli stessi dei numeri collegati sui lati. Quindi rimuove i numeri sui lati che sono uguali ai numeri sui lati successivi. Infine rimuove tutti i numeri occorsi due o più volte e aggiunge il numero centrale.


2

CJam, 90 byte

Questo si basa su un riempimento inondazione iterativo spiegato qui e può essere giocato a golf molto!

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

Richiede l'input in ordine ABCDEFGHsimile a:

[0 1 1 2 1 0 5 5 1]

e output sono i nodi collegati:

[1 1 2 1 5 5 1]

Breve spiegazione

  • Innanzitutto, eseguo l'iterazione sull'array di input per ciascuna etichetta.
  • In ogni iterazione, eseguo il riempimento per capire nodi disconnessi.
  • Se il numero di nodi disconnessi è maggiore di 1, tale etichetta viene disconnessa.
    • 1 perché un'etichetta può avere solo 1 occorrenza nell'array di input.
  • Quindi filtro semplicemente le etichette disconnesse e stampo l'array.

Spiegazione completa da seguire

Provalo online qui

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.