Tenga en cuenta que esta es una pregunta que se centra principalmente en estructuras de datos
Introducción
¡Bacefook quiere que la gente sea más amable! Como tal, ¡están implementando un nuevo sistema para sugerir amigos! Su tarea es ayudar a Bacefook a implementar su nuevo sistema de sugerencias.
Presupuesto:
Su programa debe ser un REPL (loop-eval-print leer) que soporta 3 tipos de comandos: FRIEND
, SUGGEST
y KNOW
.
FRIEND X Y
- Especifica eso X
y Y
son amigos en la red social.
Si X es amigo de Y, entonces Y es amigo de X
Puede, pero no tiene que tener salida
X siempre es amigo de X
KNOW X Y
- Emite un valor verdadero si X e Y son amigos, de lo contrario, falso
KNOW X X
siempre dará como resultado un valor verdadero
SUGGEST X Y
- Emite un valor verdadero si X e Y deben ser amigos, de lo contrario, falso X e Y deberían ser amigos si:
X e Y no son amigos
X e Y tienen al menos 1 amigo en común
Se le permite sustituir FRIEND
, SUGGEST
y KNOW
con sus propias cadenas, pero hay que mencionar lo que la cadena ha reemplazado con cada comando.
Su programa puede recibir entrada / salida de la forma que desee, siempre y cuando sea razonablemente fácil reconocer cómo funciona.
El número de personas en la red social N
está entre 1 y 100,000, pero puede haber cualquier número de "enlaces de amigos" (bordes).
Si aún no lo ha notado, este es un problema de búsqueda de gráficos. La estructura de datos (probablemente) más fácil (y posiblemente más rápida) para implementar esto sería una matriz de adyacencia.
Casos de prueba
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
Aquí hay algunos casos de prueba más en forma de imagen
Condición de victoria
Este es el código de golf , ¡el código más corto gana!
SUGGEST UK EU
.
{A, B, C, D}
?