Nota che questa è una domanda che si concentra principalmente sulle strutture di dati
introduzione
Bacefook vuole che le persone siano più amichevoli! Come tali, stanno implementando un nuovo sistema per suggerire amici! Il tuo compito è aiutare Bacefook a implementare il loro nuovo sistema di suggerimento.
specifiche tecniche:
Il vostro programma deve essere un REPL (loop lettura-valuta-stampa) che supporta 3 tipi di comandi: FRIEND
, SUGGEST
e KNOW
.
FRIEND X Y
- Specifica che X
e Y
sono amici nel social network.
Se X è amico di Y, allora Y è amico di X
Può, ma non deve avere output
X è sempre amico di X
KNOW X Y
- Emetti un valore veritiero se X e Y sono amici, falsa altrimenti
KNOW X X
produrrà sempre un valore veritiero
SUGGEST X Y
- Mostra un valore veritiero se X e Y dovessero essere amici, falsa altrimenti. X e Y dovrebbero essere amici se:
X e Y non sono amici
X e Y hanno almeno 1 amico in comune
Hai il permesso di sostituire FRIEND
, SUGGEST
e KNOW
con le proprie corde, ma si deve parlare di quello che stringa aver sostituito ogni comando con.
Il tuo programma può ricevere input / produrre output in qualsiasi modo desiderabile, purché sia ragionevolmente facile riconoscere come funziona.
Il numero di persone nel social network N
è compreso tra 1 e 100.000, ma potrebbe esserci un numero qualsiasi di "link amici" (bordi).
Se non l'hai ancora notato, questo è un problema di ricerca del grafico. La struttura dei dati (probabilmente) più semplice (e forse più veloce) per implementarla sarebbe una matrice di adiacenza.
Casi test
FRIEND A B
FRIEND A C
FRIEND B D
SUGGEST A B -> Falsy, as they are friends
SUGGEST A D -> Truthy, as they share B as a common friend
SUGGEST C D -> Falsy, they do not share a common friend
KNOW D B -> Truthy, they are friends
KNOW B C -> Falsy, not friends
=============
FRIEND Tom Tim
KNOW Tom Tim -> Truthy
KNOW Tim Tom -> Truthy
KNOW Tom Kit -> Falsy
=============
KNOW Tim Kit -> Falsy
FRIEND Tim Tom
KNOW Tim Kit -> Falsy
FRIEND Tom Kit
SUGGEST Tim Kit -> Truthy
=============
FRIEND X Y
SUGGEST X Y -> Falsy since X is friends with X
Ecco alcuni altri casi di test in forma di immagine
Condizioni di vittoria
Questo è code-golf , vince il codice più corto!
SUGGEST UK EU
.
{A, B, C, D}
?