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связан. В этом примере приемлемый вывод будет [1,2,5], так как два 0s не связаны. Побеждает самое низкое число байтов.

Подробные правила

  • Вы можете выбрать фиксированный порядок для узлов в вашем входном списке, и вы должны указать это в своем ответе. В заказе 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
Zgarb
источник

Ответы:

4

J 54 байта

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

Функция, принимающая список в порядке ABCDEFGHI.


Учитывая матрицу смежности A графа порядка n , граф связен тогда и только тогда, когда все элементы ( A + I ) n отличны от нуля, где I - единичная матрица n × 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]

Сначала удаляются числа в углах, которые совпадают с числами на сторонах. Затем он удаляет числа на сторонах, которые совпадают с числами на следующих сторонах. Наконец, он удаляет все числа, встречающиеся два или более раз, и добавляет центральный номер.

jimmy23013
источник
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 вхождение во входном массиве.
  • Затем я просто отфильтровываю отключенные метки и распечатываю массив.

Полное объяснение, чтобы следовать

Попробуйте онлайн здесь

оптимизатор
источник