Observe que esta é uma pergunta focada principalmente em estruturas de dados
Introdução
Bacefook quer que as pessoas sejam mais amigáveis! Como tal, eles estão implementando um novo sistema para sugerir amigos! Sua tarefa é ajudar o Bacefook a implementar seu novo sistema de sugestões.
Especificações:
O programa deve ser um REPL (circular lê-eval-print) que suporta 3 tipos de comando: FRIEND, SUGGESTeKNOW .
FRIEND X Y- Especifica isso Xe Ysão amigos na rede social.
Se X é amigo de Y, Y é amigo de X
Pode, mas não precisa ter saída
X é sempre amigo de X
KNOW X Y - Emita um valor verdadeiro se X e Y forem amigos, caso contrário, falsifique
KNOW X Xsempre produzirá um valor verdadeiro
SUGGEST X Y- Crie um valor verdadeiro se X e Y forem amigos, caso contrário, falsifique. X e Y devem ser amigos se:
X e Y não são amigos
X e Y têm pelo menos 1 amigo em comum
Você está autorizado a substituir FRIEND, SUGGESTe KNOWcom suas próprias cordas, mas você deve mencionar o que corda tenha sido substituída cada comando com.
Seu programa pode receber / produzir saída da forma que desejar, desde que seja razoavelmente fácil reconhecer como ele funciona.
O número de pessoas na rede social Nestá entre 1 e 100.000, mas pode haver qualquer número de "links de amigos" (arestas).
Se você ainda não percebeu, este é um problema de pesquisa de gráficos. A estrutura de dados (provavelmente) mais fácil (e possivelmente mais rápida) para implementar isso seria uma matriz de adjacência.
Casos de teste
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
Aqui estão mais alguns casos de teste em forma de imagem
Condição de vitória
Este é o código-golfe , o código mais curto vence!
SUGGEST UK EU.
{A, B, C, D}?