이것은 Calvin 's Hobbies 가 커뮤니티에 남겨둔 몇 가지 과제 중 하나입니다 .
다음과 같은 형식의 "패밀리 트리 설명"파일을 작성하십시오.
[ID] [mother ID] [father ID] [gender] [full name]
예를 들어 http://en.wikipedia.org/wiki/Cousin 의 첫 번째 가계도를 설명합니다 .
1 ? ? M Adam
2 ? ? F Agatha
3 ? ? M Bill
4 2 1 F Betty
5 2 1 M Charles
6 ? ? F Corinda
7 3 4 M David
8 6 5 F Emma
파일 이름과 두 개의 ID를 사용하고 관계에 대한 일반적인 영어 이름을 사용하여 사람들이 혈액과 어떻게 관련되는지를 가장 간단한 용어로 출력하는 프로그램이나 함수를 작성하십시오. 입력은 STDIN, ARGV 또는 함수 인수를 통해 이루어질 수 있지만 출력은 STDOUT으로되어야합니다.
노트
- ID는 양의 정수입니다.
?
부모가 알려지지 않은 경우 사용됩니다.- 그래프가 연결되고주기가 없다고 가정합니다.
- 각 개인의 부모가 그 사람보다 먼저 목록에 있다고 가정 할 수 없습니다 (따라서 개인의 부모 ID가 자신의 ID보다 클 수 있음).
- 모든 사람이 남성인지 여성인지, 모든 사람이 정확히 하나의 어머니와 정확히 하나의 아버지 (정확한 성별)를 가졌다 고 가정합니다.
- 이름이 고유하다고 가정하십시오.
- 이름에는 공백이있을 수 있습니다.
혈액 관계
관계 R 의 다음 정의는 사람 A 가 R 인지 또는 사람 B 인지를 결정합니다 . R의 두 가지 변형 이 나열되면 첫 번째는 암컷 A에 대한 것이고 두 번째는 수컷 A에 대한 것 입니다. 이들 모두를 구현해야합니다. 여러 정의가 일치하면 이전 정의가 사용됩니다. 괄호 안의 용어는 성별 중립적 인 용어로, 구현할 필요는 없지만 추가 정의에서 재사용됩니다. N 및 M 과 관련된 정의에서 N> 1 및 M> 0 이라고 가정하십시오 .
- 딸 / 아들 : A 는 부모를 B 로 표시합니다.
- 어머니 / 아버지 (부모) : B 는 A 를 부모로 표시합니다.
- 자매 / 형제 (형제) : A 와 B 는 같은 어머니 와 아버지를 열거합니다 .
- 이복 자매 / 반 남동생 (형제) : A 와 B 는 같은 어머니 또는 같은 아버지를 열거 합니다.
- 조카 / 조카 : A 는 B 의 형제 인 부모를 나열합니다 .
- 이모 / 아저씨 : B 는 A 의 조카 또는 조카입니다.
- 손녀 / 손자 (손자) : A 는 B 를 부모로 나열한 부모를 나열합니다 .
- 할머니 / 조부 (조부모) : B 는 A 의 손자입니다.
- 위조 / 조카 : A 는 B 의 형제 인 C 의 손자입니다 .
- 대모 / 조부모 : B 는 A 의 조카 또는 조카입니다.
- 증손녀 / 아들 (1 증손가) : A는 의 손자 인 C 나열 B를 부모로.
- 증조 할머니 / 아버지 (첫째 증조부모) : B 는 A 의 첫 증손자입니다.
- N 번째 증손녀 / 아들 (N 번째 증손자) : A 는 B 의 부모로 B 를 열거 한 C의 N-1 번째 손자입니다 .
- N 조부모 / 아버지 (N 조부모) : B 는 A 의 N 조부모 입니다.
- N 번째 위조 / 조카 : A 는 B 의 형제 인 C 의 (N-1) 위 증손자입니다 .
- N 번째 대모 / 아저씨 : B 는 A 의 N 번째 대 조카의 N 번째 위대한 조카입니다.
- 사촌 : A 는 B 의 조부모 인 C 의 손자입니다 .
- N 번째 사촌 : A 는 B 의 (N-1) 조부모 인 C의 N-1 번째 손자입니다 .
- 사촌, M 번 삭제 : A 는 B의 조부모 인 C 의 손자 또는 A 는 B 의 조부모 인 C 의 M 조자입니다 .
- N 번째 사촌, M 시간은 제거 : A가 의 P 번째 증손 인 C 의 q 번째 증조 할아버지 인 B ,
N = min(P,Q) + 1
와M = |P-Q|
.
을 위해 Nth
쓰기, 2nd
, 3rd
, 4th
, 5th
등
을 위해 M times
쓰기, once
, twice
, thrice
, 4 times
, 5 times
등
예
다음 파일이 사용되었다고 가정합니다 (여러 공간을 처리 할 필요는 없지만 가독성을 위해 추가했습니다).
1 ? ? F Agatha
2 ? ? M Adam
3 ? ? F Betty
4 1 2 M Bertrand
5 1 2 F Charlotte
6 ? ? M Carl
7 ? ? F Daisy
8 3 4 M David
9 5 6 F Emma
10 ? ? M Edward
11 ? ? F Freya
12 7 8 M Fred
13 9 10 F Grace
14 ? ? M Gerald
15 ? ? F Hillary
16 11 12 M Herbert
17 13 14 F Jane
18 ? ? M James
19 15 16 F Kate
20 17 18 M Larry
21 ? 18 F Mary
그런 다음 입력 ID는 다음과 같이 출력에 매핑되어야합니다.
1 2 --> Agatha is not a blood relative to Adam.
8 3 --> David is the son of Betty.
9 13 --> Emma is the mother of Grace.
4 5 --> Bertrand is the brother of Charlotte.
9 4 --> Emma is the niece of Bertrand.
5 8 --> Charlotte is the aunt of David.
16 7 --> Herbert is the grandson of Daisy.
1 9 --> Agatha is the grandmother Emma.
12 5 --> Fred is the great-nephew of Charlotte.
4 13 --> Bertrand is the great-uncle of Grace.
16 3 --> Herbert is the great-grandson of Betty.
6 17 --> Carl is the great-grandfather of Jane.
19 2 --> Kate is the 3rd great-granddaughter of Adam.
1 17 --> Agatha is the 2nd great-grandmother of Jane.
20 4 --> Larry is the 3rd great-nephew of Bertrand.
5 16 --> Charlotte is the 2nd great-aunt of Herbert.
8 9 --> David is the cousin of Emma.
19 20 --> Kate is the 4th cousin of Larry.
16 9 --> Herbert is the cousin, twice removed, of Emma.
12 17 --> Fred is the 2nd cousin, once removed, of Jane.
21 20 --> Mary is the half-sister of Larry.
손으로 직접 작성 했으므로 실수를 발견하면 알려주십시오.
또 다른 일련의 테스트 데이터 (Scott Leadley에서 제공 한 오류는 내 것이지만 Martin의 것이 아닙니다)
프톨레마이오스 가계도
그림은 예시입니다. 아래 데이터는 Wikipedia 기사 " Ptolemaic dynasty " 에서 가져온 것 입니다.
1 ? ? F Berenice I of Egypt
2 ? ? M Ptolemy I Soter
41 1 2 F Arsinoe II of Egypt
3 1 2 M Ptolemy II Philadelphus
4 ? ? F Arsinoe I of Egypt
5 ? ? M Philip
6 4 3 M Ptolemy III Euergetes
7 1 5 F Magas of Cyrene
8 7 ? F Berenice II
9 8 6 M Ptolemy IV Philopator
10 8 6 F Arsinoe III of Egypt
11 10 9 M Ptolemy V Epiphanes
12 ? ? F Cleopatra I of Egypt
13 12 11 M Ptolemy VI Philometor
14 12 11 F Cleopatra II
15 12 11 M Ptolemy VIII Physcon
19 ? ? F Eirene
16 14 13 M Ptolemy VII Neos Philopator
17 14 13 F Cleopatra III
18 14 15 M Ptolemy Memphites
20 19 15 M Ptolemy Apion
21 17 15 F Cleopatra IV
22 17 15 M Ptolemy IX Lathyros
23 17 15 F Cleopatra Selene I
24 17 15 M Ptolemy X Alexander I
25 23 22 F Berenice III of Egypt
26 23 24 M Ptolemy XI Alexander II
27 21 22 M Ptolemy XII Auletes
28 25 24 F Cleopatra V of Egypt
29 28 27 F Cleopatra VI of Egypt
30 28 27 F Berenice IV of Egypt
31 28 27 M Ptolemy XIII Theos Philopator
32 28 27 F Cleopatra VII Thea Philopator
33 28 27 M Ptolemy XIV
34 28 27 F Arsinoe IV of Egypt
35 ? ? M Julius Caesar
37 32 35 M Ptolemy XV Caesarion
36 ? ? M Mark Anthony
38 32 36 M Alexander Helios
39 32 36 M Ptolemy XVI Philadelphus
40 32 36 F Cleopatra Selene II