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
, SUGGEST
eKNOW
.
FRIEND X Y
- Especifica isso X
e Y
sã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 X
sempre 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
, SUGGEST
e KNOW
com 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 N
está 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}
?