이것은 주로 데이터 구조 에 중점을 둔 질문입니다.
소개
Bacefook은 사람들이 더 친해지기를 원합니다! 그래서 그들은 친구를 제안하는 새로운 시스템을 구현하고 있습니다! 당신의 임무는 Bacefook이 새로운 제안 시스템을 구현하도록 돕는 것입니다.
명세서:
프로그램은 FRIEND
, SUGGEST
및 의 세 가지 유형의 명령을 지원하는 REPL (read-eval-print loop)이어야합니다 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는 공통 친구가 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
승리 조건
이것은 code-golf , 최단 코드 승리입니다!
SUGGEST UK EU
.
{A, B, C, D}
있습니까?