Đây là một trong một số thử thách dành cho cộng đồng bởi Sở thích của Calvin .
Lấy tệp "mô tả cây gia đình" với các dòng có dạng:
[ID] [mother ID] [father ID] [gender] [full name]
chẳng hạn như cái này mô tả cây gia đình đầu tiên tại 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
Viết chương trình hoặc chức năng lấy tên tệp và hai ID và đưa ra cách những người đó có liên quan đến máu theo cách đơn giản nhất, sử dụng tên tiếng Anh phổ biến cho quan hệ. Đầu vào có thể thông qua STDIN, ARGV hoặc đối số hàm nhưng đầu ra phải là STDOUT.
Ghi chú
- ID là số nguyên dương.
?
được sử dụng khi không biết nguồn gốc.- Giả sử đồ thị sẽ được kết nối và không có chu kỳ.
- Bạn có thể không cho rằng cha mẹ của mỗi người được liệt kê trước người đó (vì vậy ID cha mẹ của một người có thể lớn hơn ID của chính họ).
- Giả sử tất cả mọi người là nam hoặc nữ và mọi người đều có chính xác một người mẹ và chính xác một người cha (đúng giới tính), mặc dù họ có thể không biết.
- Giả sử tên là duy nhất.
- Tên có thể có không gian trong đó.
Quan hệ huyết thống
Các định nghĩa sau đây của các mối quan hệ R xác định xem người Một là R hoặc người B . Nếu hai biến thể của R được liệt kê, người đầu tiên là dành cho nữ Một và thứ hai cho nam Một . Tất cả những điều này cần phải được thực hiện. Nếu nhiều định nghĩa khớp, định nghĩa trước sẽ được sử dụng. Các thuật ngữ trong ngoặc đơn là các thuật ngữ trung lập về giới, không cần phải được thực hiện nhưng sẽ được sử dụng lại trong các định nghĩa tiếp theo. Trong các định nghĩa liên quan đến N và M , giả sử N> 1 và M> 0 .
- con gái / con trai: A liệt kê B là cha hoặc mẹ.
- mẹ / cha (cha mẹ): B liệt kê A là cha hoặc mẹ.
- chị / em trai (anh chị em): A và B liệt kê cùng một mẹ và cha.
- chị cùng cha khác mẹ / anh cùng cha khác mẹ (anh chị em): A và B liệt kê cùng một người mẹ hoặc cùng cha khác mẹ / anh cùng cha khác người cha giống nhau.
- cháu gái / cháu trai: A liệt kê một phụ huynh là anh chị em của B .
- dì / chú: B là A cháu gái hoặc cháu trai của
- cháu gái / cháu trai (cháu): A liệt kê một phụ huynh liệt kê B là cha mẹ của họ.
- bà / ông (ông bà): B là cháu của A.
- lớn-cháu gái / lớn-cháu trai: Một là cháu của C là người anh chị em ruột của B .
- dì / dì vĩ đại: B là cháu gái hoặc cháu chắt của A.
- cháu chắt / con trai (cháu chắt thứ 1): A là cháu của C , người liệt kê B là cha mẹ của chúng.
- bà cố / cha (bà cố thứ 1): B là cháu chắt thứ nhất của A.
- Cháu gái / con trai thứ N (Cháu lớn thứ N): A là cháu (N-1) của C , người liệt kê B là cha mẹ của chúng.
- Thứ n bà cố / cha (thứ n great-grandparent): B là A 's thứ n lớn-cháu.
- Thứ n lớn-cháu gái / cháu trai: Một là (N-1) lần thứ lớn-cháu của C là người anh chị em ruột của B .
- Thứ n lớn-dì / chú: B là A 's thứ n lớn-cháu gái của thứ n lớn-cháu.
- anh em họ: Một là cháu của C là người ông bà của B .
- Thứ n anh em họ: Một là (N-1) lần thứ cháu của C là người (N-1) lần thứ ông bà của B .
- anh em họ, M lần loại bỏ: Một là cháu của C là người ông bà MTH của B hoặc A là cháu MTH của C là người ông bà của B .
- Anh em họ thứ N, M lần loại bỏ: Một là PTH lớn-cháu của C là người q great-grandparent B , nơi
N = min(P,Q) + 1
vàM = |P-Q|
.
Cho Nth
, ghi 2nd
, 3rd
, 4th
,5th
, vv
Cho M times
, ghi once
, twice
, thrice
, 4 times
,5 times
, vv
Ví dụ
Giả sử tệp sau được sử dụng (bạn không phải xử lý nhiều khoảng trắng, nhưng tôi đã thêm chúng cho mức độ dễ đọc):
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
Sau đó, ID đầu vào sẽ ánh xạ tới đầu ra như sau:
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.
Tôi đã viết chúng lên bằng tay để cho tôi biết nếu bạn phát hiện ra bất kỳ sai lầm nào.
Một bộ dữ liệu thử nghiệm khác (do Scott Leadley cung cấp, bất kỳ lỗi nào là của tôi chứ không phải của Martin)
Cây gia đình Ptolemy
Hình ảnh mang tính minh họa; dữ liệu dưới đây xuất phát từ bài viết trên Wikipedia " Triều đại Ptolemaic ".
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