Соревнование
Ваша программа должна принимать 3 входа:
- Целое положительное число, которое является числом переменных,
- Набор неупорядоченных пар неотрицательных целых чисел, где каждая пара представляет равенство между переменными, и
- Положительное целое число, которое представляет начальную переменную,
Он должен возвращать набор неотрицательных целых чисел, которые представляют все переменные, которые могут быть показаны транзитивно равными начальной переменной (включая саму начальную переменную).
Другими словами, учитывая входные данные N
, E
и S
, возвращают набор Q
, такой что:
S ∈ Q
,- Если
Z ∈ Q
и(Y = Z) ∈ E
тогдаY ∈ Q
. - Если
Z ∈ Q
и(Z = Y) ∈ E
тогдаY ∈ Q
.
Это также может быть выражено как проблема теории графов :
Учитывая неориентированный граф и вершину в графе, перечислите вершины в его связанном компоненте .
Характеристики
- Вы можете выбрать индексирование на основе 0 или 1.
- Первый вход подсчитывает количество присутствующих переменных, где переменные задаются в виде чисел. В качестве альтернативы, вы не можете принимать эти входные данные, и в этом случае предполагается, что они равны либо максимальному значению присутствующего индекса, либо еще одному, в зависимости от вашей схемы индексации.
- Вы можете предположить, что вход правильно сформирован: вам не будут заданы переменные вне диапазона, указанного в первом входе. Например,
3, [1 = 2, 2 = 0], 1
является допустимым входом, а4, [1 = 719, 1 = 2, 3 = 2], -3
нет. - Вы не можете предполагать, что любая переменная будет иметь какие-либо равенства, связанные с ней. Если дан третий вход, который является «одиноким» (не имеет равенств), правильным выходом будет одноэлементное множество, содержащее только этот вход (так как он равен самому себе).
- Вы можете предположить, что равенства не будут содержать равенства от переменной к себе, и что одно и то же равенство не будет дано несколько раз (это включает в себя такие вещи, как
1 = 2
и2 = 1
). - Вы можете предположить, что все заданные целые числа будут в пределах представимого диапазона вашего языка.
- Вы можете взять второй вход в любом разумном формате.
Вот несколько разумных форматов:
0 = 2
0 = 3
1 = 0
{(0, 2), (0, 3), (1, 0)}
[0, 2, 0, 3, 1, 0]
0 2 0 3 1 0
Graph[{{0, 2}, {0, 3}, {1, 0}}]
[0 = 2, 0 = 3, 1 = 0]
- Вы можете выводить в любом разумном формате (например, набор, список и т. Д.). Заказ не имеет значения.
счет
Это код-гольф , поэтому выигрывает самая короткая действительная программа (в байтах).
Тестовые случаи (0-indexed)
3, [1 = 2, 2 = 0], 1 -> {0, 1, 2}
5, [0 = 2, 0 = 3, 1 = 2], 3 -> {0, 1, 2, 3}
6, [0 = 3, 1 = 3, 2 = 4, 5 = 1], 4 -> {2, 4}
6, [0 = 3, 1 = 3, 2 = 4, 5 = 1], 5 -> {0, 1, 3, 5}
5, [0 = 1, 2 = 0, 0 = 3, 4 = 0], 2 -> {0, 1, 2, 3, 4}
6, [0 = 1, 1 = 2, 2 = 3, 3 = 4, 4 = 5], 3 -> {0, 1, 2, 3, 4, 5}
4, [0 = 1, 1 = 2, 2 = 0], 3 -> {3}
5, [0 = 2, 2 = 4], 2 -> {0, 2, 4}
8, [], 7 -> {7}
Тестовые случаи (1-индексированные)
3, [2 = 3, 3 = 1], 2 -> {1, 2, 3}
5, [1 = 3, 1 = 4, 2 = 3], 4 -> {1, 2, 3, 4}
6, [1 = 4, 2 = 4, 3 = 5, 6 = 2], 5 -> {3, 5}
6, [1 = 4, 2 = 4, 3 = 5, 6 = 2], 6 -> {1, 2, 4, 6}
5, [1 = 2, 3 = 1, 1 = 4, 5 = 1], 3 -> {1, 2, 3, 4, 5}
6, [1 = 2, 2 = 3, 3 = 4, 4 = 5, 5 = 6], 4 -> {1, 2, 3, 4, 5, 6}
4, [1 = 2, 2 = 3, 3 = 1], 4 -> {4}
5, [1 = 3, 3 = 5], 3 -> {1, 3, 5}
8, [], 8 -> {8}
code-golf
graph-theory
equation
Esolanging Fruit
источник
источник
Ответы:
Брахилог , 22 байта
Попробуйте онлайн!
объяснение
источник
Python 2 ,
6563 байта-2 байта благодаря овсу
Попробуйте онлайн!
источник
Pyth , 12 байт
Тестирование.
источник
Чистый ,
8581 байтПопробуйте онлайн!
Определяет функцию
$ :: [[Int]] -> ([Int] -> [Int])
источник
limit
работает?Wolfram Language (Mathematica) , 32 байта
Формат ввода:
{2<->3, 3<->1}, 3
. Это не займет первый вход.Попробуйте онлайн!
источник
Язык сценариев работы Flashpoint , 364 байта
Звоните с:
Выход:
раскатали:
источник
Python 2 , 53 байта
Попробуйте онлайн!
Та же самая длина как функция:
Попробуйте онлайн!
Это основано на хорошем решении Рода, использующем обновление с коротким замыканием
b|=b&p and p
. Взятие числа переменных в качестве входных данныхn
помогает сократить код цикла.источник
Желе ,
121110 байт-1 благодаря Эрику Гольфисту (замените атом
œ&
наf
)Двоичная ссылка принимает
E
слева (в виде списка из списков длины два) иS
справа (в виде целого числа), возвращая [дедуплицированный] список.Попробуйте онлайн! или посмотрите набор тестов .
Как?
источник
œ&
f
Возвращаемые значения s и s всегда имеют одно и то же логическое свойство.Perl 5
-n0
,4939 байтЗадать начальное значение в строке на STDIN, за которой следуют строки пар эквивалентных чисел (или дать начальное значение последним или посередине, или дать несколько начальных значений, все это работает)
Попробуйте онлайн!
Это может вывести элемент в наборе результатов несколько раз. Это 48-байтовое изменение выводит каждый эквивалентный элемент только один раз:
Попробуйте онлайн!
источник
Рубин , 39 байт
Попробуйте онлайн!
источник
K (нгн / к) ,
373635 байтПопробуйте онлайн!
{
}
функция с аргументамиx
,y
иz
представляяN
,E
иS
соответственно!x
список 0 1 ... х-1&2
это список0 0
y,,&2
мы добавляем пару0 0
кy
избежать особого случая пустогоy
+y,,&2
то же самое перенесено из списка пар в пару списков{
}[+y,,&2]
является проекцией, то есть функцией, в которойx
будет значение+y,,&2
иy
будет аргумент, переданный при вызове проекции|y x
находитсяy
в индексахx
, негативы (|
)@[y;x;&;|y x]
изменитьy
по индексамx
, взяв минимум (&
) существующего элемента и элемента из|y x
/
продолжайте звонить до схожденияa:
назначить наa[z]=z
логическая маска элементов,a
равныхz
-ому&
преобразовать логическую маску в список индексовисточник
Октава ,
4845 байтПринимает ввод как "матрицу смежности", например, использует
[0 0 0; 0 0 1; 1 0 0]
для[2 = 3, 3 = 1]
, попробуйте это онлайн!объяснение
Сначала мы построим полную матрицу смежности для транзитивного графа, используя сумму
eye(size(A))
(элементы рефлексивны),A
(входные) иA'
(отношение симметрично).Вычислит транзитивное замыкание путем вычисления силы
nnz(A)
которой хватает (nnz(A)
это верхняя границы для длины для пути), поэтому оттуда все , что осталось, чтобы получить нужную строку с(u,:)
иfind
всеми ненулевых элементами.источник
Python 2 , 87 байт
Попробуйте онлайн!
источник
Пари / ГП , 80 байт
Попробуйте онлайн!
источник
JavaScript (ES6), 87 байт
Дедупликация была бы возможна с использованием
&&[...new Set(d[n]||[n])]
14 байтов.источник