นี่คือหนึ่งในความท้าทายหลายประการที่ชุมชนของคาลวินต้องทำ
ใช้ไฟล์ "แผนภูมิต้นไม้อธิบาย" ด้วยบรรทัดของแบบฟอร์ม:
[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 ผู้ปกครองของบุคคลนั้นอาจมากกว่ารหัสของตัวเอง)
- สมมติว่าทุกคนเป็นชายหรือหญิงและทุกคนมีแม่หนึ่งคนและพ่อหนึ่งคน (เพศที่ถูกต้อง) แม้ว่าพวกเขาจะไม่รู้จักก็ตาม
- สมมติว่าชื่อไม่ซ้ำกัน
- ชื่อสามารถมีช่องว่างในพวกเขา
ความสัมพันธ์ทางสายเลือด
คำจำกัดความของความสัมพันธ์ต่อไปนี้Rกำหนดว่าบุคคลAเป็น RหรือบุคคลB หากทั้งสองสายพันธุ์ของRมีการระบุไว้เป็นครั้งแรกสำหรับหญิงและครั้งที่สองสำหรับชาย สิ่งเหล่านี้จำเป็นต้องได้รับการปฏิบัติ หากคำจำกัดความหลายตรงกันตรงกับก่อนหน้านี้ที่จะใช้ ข้อกำหนดในวงเล็บคือคำศัพท์ที่ไม่คำนึงถึงเพศซึ่งไม่จำเป็นต้องนำไปใช้ แต่จะถูกนำมาใช้ซ้ำในคำจำกัดความเพิ่มเติม ในคำนิยามที่เกี่ยวข้องกับNและMสมมติN> 1และM> 0
- ลูกสาว / ลูกชาย: รายการBเป็นผู้ปกครองอย่างใดอย่างหนึ่ง
- parent / parent (parent): BแสดงรายการAเป็น parent ทั้งคู่
- น้องสาว / พี่ชาย (พี่น้อง): AและBแสดงแม่และพ่อคนเดียวกัน
- half-sister / half-brother (พี่น้อง): AและBแสดงรายการแม่หรือพ่อคนเดียวกัน
- หลานสาว / หลาน: รายชื่อผู้ปกครองที่เป็นพี่น้องของที่B
- ป้า / ลุง: Bเป็น's หลานสาวหรือหลานชาย
- หลานสาว / หลานชาย (หลาน): รายชื่อผู้ปกครองที่แสดงรายการBเป็นพ่อแม่ของพวกเขา
- ยาย / คุณปู่ (ปู่ย่าตายาย): Bเป็น's หลาน
- หลานสาว / หลานชาย: เป็นหลานของCที่เป็นพี่น้องของB
- ดีป้า / ลุง: Bเป็น's หลานสาวหรือหลานชาย
- ปู่ย่าตายาย / ลูกชาย (หลานคนที่ 1): Aเป็นหลานของCที่ระบุว่าBเป็นผู้ปกครอง
- คุณย่า / พ่อ (ปู่ย่าตายายคนที่ 1): Bเป็นปู่ย่าตายายคนที่ 1 ของA
- หลานสาว / ลูกหลานที่ N (ปู่ย่าตายายที่ N): Aเป็น (N-1) คนที่Cซึ่งมีรายชื่อBเป็นผู้ปกครอง
- คุณย่า / พ่อที่ N (ปู่ย่าตายายที่ N): Bเป็น's ชับดีหลาน
- ชับหลานสาว / หลาน:เป็น (N-1) วันที่ดีหลานของCที่เป็นพี่น้องของB
- ป้าใหญ่ / ลุงคนที่: Bเป็น's ชับหลานสาวของชับหลานชาย
- ลูกพี่ลูกน้อง: Aเป็นหลานของCที่เป็นปู่ย่าตายายของB
- ลูกพี่ลูกน้อง: Aเป็น (N-1) หลาน TH ของCที่เป็น (N-1) ปู่ย่าตายายของ TH B
- ลูกพี่ลูกน้อง, ลบครั้ง M: Aเป็นหลานของCซึ่งเป็นปู่ย่าตายาย Mth ของB หรือ Aเป็นหลานชายของM Cที่เป็นปู่ย่าตายายของB
- ลูกพี่ลูกน้องของ N ลบ M ครั้ง: Aเป็นหลานปู่ย่าตายายของCที่เป็นปู่ย่าตายายที่ Qth ของ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 "
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