3x3 підключені компоненти


9

Змагання

Розглянемо сітку 3x3 King, як показано на наступній графіці 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

Відповіді:


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.


Це дивовижне рішення! На
задній погляд

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 зустріч у вхідному масиві.
  • Потім я просто фільтрую відключені мітки і друкую масив.

Повне пояснення, яке слід слідувати

Спробуйте його онлайн тут

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.