Входные данные:
Матрица, содержащая целые числа в диапазоне [0 - 9] .
Вызов:
Определите, все ли ненулевые элементы связаны друг с другом по вертикали и / или по горизонтали.
Выход:
Значение truthy , если все они связаны, и falsy значение , если есть ненулевые элементы / группы, которые не связаны с другими элементами / групп.
Тестовые случаи:
Тестовые случаи разделены линией. Тестовые случаи могут быть найдены в более удобных форматах здесь ( слава к Дада ).
Следующие все связаны и должны возвращать истинное значение:
0
---
0 0
---
1 1 1
0 0 0
---
1 0 0
1 1 1
0 0 1
---
0 0 0 0 0 0
0 0 3 5 1 0
0 1 0 2 0 1
1 1 0 3 1 6
7 2 0 0 3 0
0 8 2 6 2 9
0 0 0 0 0 5
Следующие элементы не связаны и должны возвращать ложное значение:
0 1
1 0
---
1 1 1 0
0 0 0 2
0 0 0 5
---
0 0 5 2
1 2 0 0
5 3 2 1
5 7 3 2
---
1 2 3 0 0 5
1 5 3 0 1 1
9 0 0 4 2 1
9 9 9 0 1 4
0 1 0 1 0 0
Это код-гольф , поэтому выигрывает самая короткая подача на каждом языке. Пояснения приветствуются!
Вдохновленный этим вызовом .
code-golf
decision-problem
graph-theory
matrix
Стьюи Гриффин
источник
источник
Ответы:
Сетчатка 0.8.2 ,
8077 байтПопробуйте онлайн! Редактировать: 1 байт сохранен благодаря @FryAmTheEggman. Объяснение:
Упростите до массива
@
s и1
s.Измените один
1
на_
.Наводнение заполните от
_
соседних1
с.Проверьте, остались ли какие-либо
1
s.источник
JavaScript (ES6),
136135 байтВозвращает логическое значение.
Контрольные примеры
Показать фрагмент кода
комментарии
Рекурсивная функция g () сначала ищет ненулевую ячейку (при условии, что глобально определенный флаг z установлен в 0 ), а затем начинает заполнение флудом оттуда (как только z! = 0 ).
источник
MATL , 7 байт
Это дает матрицу, содержащую все как достоверного вывода, или матрицу, содержащую по крайней мере ноль в качестве ложного . Попробуйте онлайн!
Вы также можете проверить правдивость / ложность, добавив ветку
if
-else
в нижний колонтитул; попробуй тоже!Или проверьте все тестовые случаи .
объяснение
источник
Wolfram Language (Mathematica) , 54 байта
Сохранено 2 байта благодаря пользователю 202729.
Попробуйте онлайн!
источник
C 163 байта
Спасибо @ user202729 за сохранение двух байтов!
Проходит по матрице, пока не найдет первый ненулевой элемент. Затем на некоторое время прекращает цикл и рекурсивно устанавливает каждый ненулевой элемент, связанный с найденным элементом, на ноль. Затем проходит по всей матрице, проверяя, равен ли каждый элемент нулю.
Попробуйте онлайн!
раскатали:
источник
Perl,
8079787370 байтВключает
+2
в себя для0a
Дайте входную матрицу без пробелов в STDIN (или фактически как строки, разделенные пробелами любого вида)
Легче читать, если положить в файл:
источник
Java 8, 226 байт
Это заняло довольно много времени, поэтому я рад, что это работает сейчас ..
Объяснение:
Попробуйте онлайн.
источник
APL (Dyalog Unicode) , 36 байтов SBCS
Попробуйте онлайн!
источник
Желе , 23 байта
Попробуйте онлайн!
Объяснение.
Программа помечает каждый морфологический компонент различными номерами, а затем проверяет, есть ли меньше 3 номеров. (в том числе
0
).Рассмотрим строку в матрице.
Повторно применяйте эту функцию для всех строк и столбцов в матрице, во всех порядках, в конце концов все морфологические компоненты будут иметь одинаковую метку.
И наконец...
источник
¦
берет O (n).Haskell , 132 байта
извлечено из Solve Hitori Puzzles
indices m
перечисляет(line,cell)
местоположения входной сетки.filter((/=0).(m!))
отфильтровывает все местоположения с ненулевыми значениями.splitAt 1
разбивает первого члена на одноэлементный список рядом со списком остальных.any(==1)[(b-d)^2+(p-q)^2|(d,q)<-f]
говорит, если(b,p)
касается границыf
.\(f,e)->partition(\(b,p)->touches(b,p)f)e
отделяет прикосновения от еще не [прикосновений].until(null.fst)advanceFrontier
повторяет это до тех пор, пока граница не сможет продвигаться дальше.null.snd
смотрит на результат, были ли достигнуты все локации.Попробуйте онлайн!
источник
Грязь , 37 байт
Отпечатки
1
для матча и0
без матча. Попробуйте онлайн!объяснение
Нетерминал
C
соответствует любому ненулевому символу, связанному с первым ненулевым символом матрицы в английском порядке чтения.Некоторое объяснение:
e
соответствует прямоугольнику нулевой ширины или высоты, который является частью края входной матрицы, и$
является «подстановочным знаком», который соответствует чему угодно. Выражениеe/\0{/e\0*0$e
может быть визуализировано следующим образом:Выражение
CoX^0oX
фактически анализируется как((CoF)0)oX
;oF
иoX
операторы Постфиксные и конкатенации лексем средств по горизонтали конкатенации. При этом^
сопоставление имеет более высокий приоритетoX
, поэтому поворот применяется ко всему подвыражению.oF
Корректирует ориентациюC
после того, как он поворачиваетсяoX
; в противном случае он может совпадать с первой ненулевой координатой в порядке чтения на английском языке.Это означает, что все ненулевые символы должны быть связаны с первым. Спецификатор сетки
:
технически является постфиксным оператором, ноC|:\0
является синтаксическим сахаром для(C|\0):
.источник
Perl 5 ,
131129 + 2 (-ap
) = 133 байтаПопробуйте онлайн!
источник
Python 2 ,
211163150 байтПопробуйте онлайн!
Выход через код выхода. Ввод в виде 1d списка и ширины матрицы.
источник