挑战
您的程序应接受3个输入:
- 一个正整数,它是变量的数量,
- 一组无序的非负整数对,其中每对代表变量之间的等式,并且
- 代表起始变量的正整数,
它应该返回一组表示所有变量的非负整数,这些变量可以证明与起始变量(包括起始变量本身)在传递上相等。
换句话说,给定的输入N
,E
和S
返回一个set 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索引)
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}