La sfida
Il tuo programma dovrebbe prendere 3 input:
- Un numero intero positivo che è il numero di variabili,
- Un insieme di coppie non ordinate di numeri interi non negativi, in cui ogni coppia rappresenta un'uguaglianza tra variabili e
- Un numero intero positivo che rappresenta la variabile iniziale,
Dovrebbe restituire un insieme di numeri interi non negativi che rappresentano tutte le variabili che possono essere mostrate come transitoriamente uguali alla variabile iniziale (inclusa la variabile iniziale stessa).
In altre parole, dati input N
, E
e S
, restituiscono un set Q
, tale che:
S ∈ Q
.- Se
Z ∈ Q
e(Y = Z) ∈ E
, alloraY ∈ Q
. - Se
Z ∈ Q
e(Z = Y) ∈ E
, alloraY ∈ Q
.
Questo può anche essere espresso come un problema di teoria dei grafi :
Dato un grafico non diretto e un vertice nel grafico, elenca i vertici nel suo componente collegato .
specificazioni
- Puoi scegliere di utilizzare l'indicizzazione basata su 0 o 1.
- Il primo input conta il numero di variabili presenti, in cui le variabili sono indicate come numeri. In alternativa, non è possibile accettare questo input, nel qual caso si presume che sia uguale all'indice di variabile più alto presente o uno in più di questo, a seconda dello schema di indicizzazione.
- Puoi presumere che l'input sia ben formato: non ti verranno date variabili al di fuori dell'intervallo specificato dal primo input. Ad esempio,
3, [1 = 2, 2 = 0], 1
è un input valido, mentre4, [1 = 719, 1 = 2, 3 = 2], -3
non lo è. - Non si può presumere che nessuna variabile abbia uguaglianze ad essa associate. Se viene fornito un terzo input "solo" (non ha uguaglianze), l'output corretto è un set singleton contenente solo quell'input (poiché è uguale a se stesso).
- Puoi presumere che le uguaglianze non conterranno un'uguaglianza da una variabile a se stessa e che la stessa uguaglianza non verrà data più volte (questo include cose come
1 = 2
e2 = 1
). - Puoi presumere che tutti gli interi indicati siano all'interno dell'intervallo rappresentabile della tua lingua.
- Puoi prendere il secondo input in qualsiasi formato ragionevole.
Ecco alcuni formati ragionevoli:
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]
- È possibile produrre in qualsiasi formato ragionevole (ad es. Set, elenco, ecc.). L'ordine è irrilevante.
punteggio
Questo è code-golf , quindi vince il programma valido più breve (in byte).
Casi di test (indicizzati 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}
Casi di test (1 indicizzato)
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}