Le défi
Votre programme doit prendre 3 entrées:
- Un entier positif qui est le nombre de variables,
- Un ensemble de paires non ordonnées d'entiers non négatifs, où chaque paire représente une égalité entre les variables, et
- Un entier positif qui représente la variable de départ,
Il doit renvoyer un ensemble d'entiers non négatifs qui représentent toutes les variables qui peuvent être montrées transitoirement égales à la variable de départ (y compris la variable de départ elle-même).
En d' autres termes, les entrées données N
, E
et S
, renvoyer un jeu Q
tel que:
S ∈ Q
.- Si
Z ∈ Q
et(Y = Z) ∈ E
alorsY ∈ Q
. - Si
Z ∈ Q
et(Z = Y) ∈ E
alorsY ∈ Q
.
Cela peut également être exprimé comme un problème de théorie des graphes :
Étant donné un graphique non orienté et un sommet dans le graphique, répertoriez les sommets dans son composant connecté .
Caractéristiques
- Vous pouvez choisir d'utiliser l'indexation basée sur 0 ou basée sur 1.
- La première entrée compte le nombre de variables présentes, où les variables sont données sous forme de nombres. Alternativement, vous ne pouvez pas prendre cette entrée, auquel cas elle est supposée être égale à l'indice variable le plus élevé présent, ou à un de plus, selon votre schéma d'indexation.
- Vous pouvez supposer que l'entrée est bien formée: vous ne recevrez pas de variables en dehors de la plage spécifiée par la première entrée. Par exemple,
3, [1 = 2, 2 = 0], 1
est une entrée valide, tandis que ce4, [1 = 719, 1 = 2, 3 = 2], -3
n'est pas le cas. - Vous ne pouvez pas supposer qu'une variable sera associée à des égalités. Si une troisième entrée est "solitaire" (sans égalité), la sortie correcte est un ensemble singleton contenant uniquement cette entrée (car elle est égale à elle-même).
- Vous pouvez supposer que les égalités ne contiendront pas une égalité d'une variable à elle-même, et que la même égalité ne sera pas donnée plusieurs fois (cela inclut des choses comme
1 = 2
et2 = 1
). - Vous pouvez supposer que tous les entiers donnés seront dans la plage représentable de votre langue.
- Vous pouvez prendre la deuxième entrée dans n'importe quel format raisonnable.
Voici quelques formats raisonnables:
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]
- Vous pouvez produire dans n'importe quel format raisonnable (c.-à-d. Ensemble, liste, etc.). L'ordre n'est pas pertinent.
Notation
Il s'agit de code-golf , donc le programme valide le plus court (en octets) l'emporte.
Cas de test (indexés 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}
Cas de test (1 indexé)
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}