Die Herausforderung
Ihr Programm sollte 3 Eingaben annehmen:
- Eine positive ganze Zahl, die die Anzahl der Variablen ist,
- Ein Satz ungeordneter Paare nichtnegativer Ganzzahlen, wobei jedes Paar eine Gleichheit zwischen Variablen darstellt
- Eine positive ganze Zahl, die die Startvariable darstellt,
Es sollte eine Menge nichtnegativer Ganzzahlen zurückgeben, die alle Variablen darstellen, von denen gezeigt werden kann, dass sie transitiv gleich der Startvariablen sind (einschließlich der Startvariablen selbst).
Mit anderen Worten, da Eingaben N
, E
und S
kehren einen Satz Q
, so dass:
S ∈ Q
.- Wenn
Z ∈ Q
und(Y = Z) ∈ E
dannY ∈ Q
. - Wenn
Z ∈ Q
und(Z = Y) ∈ E
dannY ∈ Q
.
Dies kann auch als graphentheoretisches Problem ausgedrückt werden :
Listen Sie bei einem ungerichteten Diagramm und einem Scheitelpunkt im Diagramm die Scheitelpunkte in der zugehörigen verbundenen Komponente auf .
Spezifikationen
- Sie können zwischen einer 0-basierten und einer 1-basierten Indizierung wählen.
- Die erste Eingabe zählt die Anzahl der vorhandenen Variablen, wobei Variablen als Zahlen angegeben werden. Alternativ können Sie diese Eingabe nicht übernehmen. In diesem Fall wird davon ausgegangen, dass sie abhängig von Ihrem Indizierungsschema entweder dem höchsten vorhandenen Variablenindex oder einem höheren entspricht.
- Sie können davon ausgehen, dass die Eingabe wohlgeformt ist: Sie erhalten keine Variablen außerhalb des Bereichs, der durch die erste Eingabe festgelegt wurde. Beispielsweise
3, [1 = 2, 2 = 0], 1
ist eine gültige Eingabe, während dies4, [1 = 719, 1 = 2, 3 = 2], -3
nicht der Fall ist. - Sie können nicht davon ausgehen, dass mit einer Variablen Gleichheiten verknüpft sind. Wenn eine dritte Eingabe "einsam" ist (keine Gleichungen hat), ist die korrekte Ausgabe eine Singleton-Menge, die nur diese Eingabe enthält (da sie sich selbst entspricht).
- Sie können davon ausgehen, dass die Gleichheit keine Gleichheit von einer Variablen zu sich selbst enthält und dass dieselbe Gleichheit nicht mehrmals gegeben wird (dies schließt Dinge wie
1 = 2
und ein2 = 1
). - Sie können davon ausgehen, dass alle angegebenen Ganzzahlen im darstellbaren Bereich Ihrer Sprache liegen.
- Sie können die zweite Eingabe in jedem vernünftigen Format vornehmen.
Hier sind einige sinnvolle Formate:
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]
- Sie können in jedem vernünftigen Format ausgeben (z. B. Set, Liste usw.). Ordnung ist irrelevant.
Wertung
Dies ist Code-Golf , also gewinnt das kürzeste gültige Programm (in Bytes).
Testfälle (0-indiziert)
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}
Testfälle (1-indiziert)
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}