Notez que cette question se concentre principalement sur les structures de données
introduction
Bacefook veut que les gens soient plus amicaux! À ce titre, ils mettent en place un nouveau système pour proposer des amis! Votre tâche consiste à aider Bacefook à mettre en œuvre son nouveau système de suggestions.
Caractéristiques:
Votre programme doit être un REPL (boucle en lecture eval-print) supportant 3 types de commande: FRIEND
, SUGGEST
et KNOW
.
FRIEND X Y
- Spécifie cela X
et Y
sont amis sur le réseau social.
Si X est ami avec Y, alors Y est ami avec X
Peut, mais ne doit pas avoir de sortie
X est toujours ami avec X
KNOW X Y
- Produire une valeur véridique si X et Y sont amis, faux sinon
KNOW X X
produira toujours une valeur véridique
SUGGEST X Y
- Produire une valeur véridique si X et Y doivent être amis, faux sinon. X et Y devraient être amis si:
X et Y ne sont pas amis
X et Y ont au moins 1 ami en commun
Vous êtes autorisé à remplacer FRIEND
, SUGGEST
et KNOW
avec vos propres chaînes, mais vous devez mentionner avec quelle chaîne vous avez remplacé chaque commande.
Votre programme peut accepter des entrées / produire des sorties de n'importe quelle manière, tant qu'il est raisonnablement facile de reconnaître son fonctionnement.
Le nombre de personnes dans le réseau social N
est compris entre 1 et 100 000, mais il peut exister un nombre illimité de «liens amis» (bords).
Si vous ne l'avez pas encore remarqué, il s'agit d'un problème de recherche de graphique. La structure de données (probablement) la plus simple (et peut-être la plus rapide) pour implémenter cela serait une matrice d'adjacence.
Cas de 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
Voici quelques cas de test supplémentaires sous forme d'image
Condition de victoire
C'est le code-golf , le code le plus court gagne!
SUGGEST UK EU
.
{A, B, C, D}
?