Зауважте, це питання, в першу чергу, зосереджене на структурах даних
Вступ
Bacefook хоче, щоб люди були дружнішими! Як такі, вони впроваджують нову систему, щоб запропонувати друзів! Ваше завдання - допомогти Bacefook впровадити нову систему пропозицій.
Технічні умови:
Ваша програма повинна бути REPL (цикл читання Eval-друку) підтримує 3 типи команд: FRIEND
, SUGGEST
і KNOW
.
FRIEND X Y
- Вказує, що це X
і Y
є друзями в соціальній мережі.
Якщо X дружить з Y, то Y дружить з X
Може, але не повинен мати вихід
X завжди дружить з X
KNOW X Y
- Виведіть правильне значення, якщо X і Y є друзями, помилково помилково
KNOW X X
завжди буде виводити триєдне значення
SUGGEST X Y
- Виведіть правдиве значення, якщо X і Y повинні бути друзями, помилково помилково. X і Y мають бути друзями, якщо:
X і Y не є друзями
X і Y мають принаймні одного друга
Ви маєте право на заміну 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}
?