チャレンジ
プログラムには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
はありません。 - あなたはできません任意の変数は、それに関連付けられたすべての等式を持つことを前提としています。「孤独な」(等値性がない)3番目の入力が与えられると、正しい出力はその入力のみを含むシングルトンセットになります(それ自体に等しいため)。
- 等式には変数からそれ自体への等式が含まれておらず、同じ等式が複数回与えられていないことを想定できます(これには
1 = 2
やなどが含まれます2 = 1
)。 - 指定されたすべての整数は、言語の表現可能な範囲内にあると想定できます。
- 2番目の入力は、適切な形式で取得できます。
いくつかの妥当な形式は次のとおりです。
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]
- 任意の妥当な形式(つまり、セット、リストなど)で出力できます。順序は関係ありません。
得点
これはcode-golfであるため、最短の有効なプログラム(バイト単位)が勝ちます。
テストケース(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-indexed)
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}