Соревнование
Ваша программа должна принимать 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}