Beachten Sie, dass dies eine Frage ist, die sich hauptsächlich auf Datenstrukturen konzentriert
Einführung
Bacefook möchte, dass die Leute freundlicher sind! Als solche implementieren sie ein neues System, um Freunde vorzuschlagen! Ihre Aufgabe ist es, Bacefook bei der Implementierung des neuen Vorschlagsystems zu helfen.
Spezifikationen:
Ihr Programm muss ein REPL (read-eval-print Schleife) unterstützt 3 Arten von Befehl sein: FRIEND
, SUGGEST
und KNOW
.
FRIEND X Y
- Gibt an, dass X
und Y
Freunde im sozialen Netzwerk sind.
Wenn X mit Y befreundet ist, dann ist Y mit X befreundet
Kann, muss aber keine Ausgabe haben
X ist immer mit X befreundet
KNOW X Y
- Geben Sie einen Wahrheitswert aus, wenn X und Y befreundet sind, andernfalls ist dies falsch
KNOW X X
Gibt immer einen Wahrheitswert aus
SUGGEST X Y
- Geben Sie einen Wahrheitswert aus, wenn X und Y befreundet sein sollen, andernfalls ist dies falsch. X und Y sollten Freunde sein, wenn:
X und Y sind keine Freunde
X und Y haben mindestens 1 Freund gemeinsam
Sie sind zu ersetzen , erlaubt FRIEND
, SUGGEST
und KNOW
mit Ihren eigenen Saiten, aber man muss erwähnen , welche Zeichenfolge Sie jeden Befehl mit ersetzt haben.
Ihr Programm kann auf jede gewünschte Weise Eingaben / Ausgaben erzeugen, solange es einigermaßen einfach zu erkennen ist, wie es funktioniert.
Die Anzahl der Personen im sozialen Netzwerk N
liegt zwischen 1 und 100.000, es kann jedoch eine beliebige Anzahl von "Friend-Links" (Kanten) geben.
Wenn Sie es noch nicht bemerkt haben, handelt es sich um ein Problem bei der Suche nach Diagrammen. Die (wahrscheinlich) einfachste (und möglicherweise schnellste) Datenstruktur, um dies zu implementieren, wäre eine Adjazenzmatrix.
Testfälle
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
Hier noch ein paar Testfälle in Bildform
Gewinnbedingung
Das ist Code-Golf , der kürzeste Code gewinnt!
SUGGEST UK EU
.
{A, B, C, D}
?