Обратите внимание, что этот вопрос в первую очередь касается структур данных.
Введение
Bacefook хочет, чтобы люди были дружелюбнее! Таким образом, они внедряют новую систему, чтобы предложить друзьям! Ваша задача - помочь Bacefook внедрить их новую систему предложений.
Характеристики:
Ваша программа должна быть REPL (цикл чтения Eval-печати) поддерживает 3 типа команд: FRIEND
, SUGGEST
и KNOW
.
FRIEND X Y
- Указывает, что X
и Y
есть друзья в социальной сети.
Если X дружит с Y, то Y дружит с X
Может, но не должен иметь выход
Х всегда дружит с Х
KNOW X Y
- Выведите истинное значение, если X и Y - друзья, иначе - ложь
KNOW X X
всегда будет выводить истинное значение
SUGGEST X Y
- Выведите истинное значение, если X и Y должны быть друзьями, иначе ложно. X и Y должны быть друзьями, если:
X и Y не друзья
У X и Y есть как минимум 1 общий друг
Вы имеете право на замену FRIEND
, SUGGEST
и KNOW
с вашими собственными строками, но вы должны отметить , что строка , которую вы заменили каждую команду с.
Ваша программа может принимать ввод-вывод любым желаемым способом, при условии, что это довольно легко понять, как она работает.
Число людей в социальной сети N
составляет от 1 до 100 000, но может быть любое количество «дружеских ссылок» (ребер).
Если вы еще не заметили, это проблема поиска графика. (Вероятно) самая простая (и, возможно, самая быстрая) структура данных для реализации этого - матрица смежности.
Контрольные примеры
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
Вот еще несколько тестов в форме изображения
Условие выигрыша
Это код-гольф , самый короткий код выигрывает!
SUGGEST UK EU
,
{A, B, C, D}
?