El reto
Su programa debe tomar 3 entradas:
- Un entero positivo que es el número de variables,
- Un conjunto de pares no ordenados de enteros no negativos, donde cada par representa una igualdad entre variables, y
- Un entero positivo que representa la variable inicial,
Debería devolver un conjunto de enteros no negativos que representan todas las variables que pueden ser transitivamente iguales a la variable inicial (incluida la propia variable inicial).
En otras palabras, entradas dadas N
, E
y S
, devolver un conjunto Q
, de tal manera que:
S ∈ Q
.- Si
Z ∈ Q
y(Y = Z) ∈ E
, entoncesY ∈ Q
. - Si
Z ∈ Q
y(Z = Y) ∈ E
, entoncesY ∈ Q
.
Esto también se puede expresar como un problema de teoría de grafos :
Dado un gráfico no dirigido y un vértice en el gráfico, enumere los vértices en su componente conectado .
Especificaciones
- Puede elegir usar indexación basada en 0 o en 1.
- La primera entrada cuenta el número de variables que están presentes, donde las variables se dan como números. Alternativamente, no puede tomar esta entrada, en cuyo caso se supone que es igual al índice variable más alto presente, o uno más, dependiendo de su esquema de indexación.
- Puede suponer que la entrada está bien formada: no se le darán variables fuera del rango especificado por la primera entrada. Por ejemplo,
3, [1 = 2, 2 = 0], 1
es una entrada válida, mientras4, [1 = 719, 1 = 2, 3 = 2], -3
que no lo es. - No puede suponer que ninguna variable tendrá ninguna igualdad asociada con ella. Si se le da una tercera entrada que es "solitaria" (no tiene igualdades), la salida correcta es un conjunto singleton que contiene solo esa entrada (ya que es igual a sí misma).
- Puede suponer que las igualdades no contendrán una igualdad de una variable a sí misma, y que la misma igualdad no se dará varias veces (esto incluye cosas como
1 = 2
y2 = 1
). - Puede suponer que todos los enteros dados estarán dentro del rango representable de su idioma.
- Puede tomar la segunda entrada en cualquier formato razonable.
Aquí hay algunos formatos razonables:
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]
- Puede imprimir en cualquier formato razonable (es decir, conjunto, lista, etc.). El orden es irrelevante.
Puntuación
Este es el código de golf , por lo que gana el programa válido más corto (en bytes).
Casos de prueba (indexados 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}
Casos de prueba (1 indexado)
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}