これは、カルバンの趣味によってコミュニティに残されたいくつかの課題の1つです。
次の形式の行を含む「家系図」ファイルを取得します。
[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
ファイル名と2つのIDを受け取り、関係に共通の英語名を使用して、それらの人々がどのように血縁関係があるかを最も簡単な用語で出力するプログラムまたは関数を作成します。入力はSTDIN、ARGV、または関数引数を介して行われますが、出力はSTDOUTに行われます。
ノート
- IDは正の整数です。
?
親子関係が不明な場合に使用されます。- グラフが接続され、サイクルがないと仮定します。
- 各人の親がその人の前にリストされていると仮定することはできません(そのため、人の親IDは自分のIDよりも大きくなる可能性があります)。
- 全員が男性または女性であり、誰もが正確に性別のない母親と父親を正確に1人持っていると仮定しますが、それらは不明かもしれません。
- 名前は一意であると想定します。
- 名前にはスペースを含めることができます。
血縁
関係Rの以下の定義は、人AがRであるか人Bであるかを決定します。Rの 2つのバリアントがリストされている場合、最初は女性Aで、2番目は男性Aです。これらすべてを実装する必要があります。複数の定義が一致する場合、以前の定義が使用されます。括弧内の用語は、性別に依存しない用語であり、実装する必要はありませんが、以降の定義で再利用されます。NとMが関係する定義では、N> 1およびM> 0と仮定します。
- 娘/息子:AはBをいずれかの親としてリストします。
- 母/父(親):BはAをいずれかの親としてリストします。
- 姉妹/兄弟(兄弟):AとBは同じ母親をリストし、父親をます。
- ハーフ・シスター/ハーフ・ブラザー(兄弟):AとBは同じ母親をリストするか、同じ父親をます。
- nie / ne:AはBの兄弟である親をリストします。
- 叔母/叔父:BはAのまたはneです。
- 孫娘/孫(孫):AはBをリストする親をリストしますを親として。
- 祖母/祖父(祖父母):BはAの孫です。
- nie //:AはBの兄弟であるCの孫です。
- 大叔母/大叔父:BはAのgreatまたはorです。
- great孫/息子(1番目のgreat孫):AはBをリストするCの孫ですを親として。
- great祖母/父(最初のgreat祖父母):BはAの最初のgreat孫です。
- N番目のgreat孫/息子(N番目のgreat孫):AはBをリストするCの(N-1)番目の孫を親として。
- N番目のgreat祖父/父(N番目のgreat祖父母):BはAのN番目のgreat孫です。
- N番目のgreat //:AはBの兄弟であるCの(N-1)番目のgreat孫です。
- N番目の大叔母/叔父: BはAのN番目のgreatのN番目のgreatです。
- いとこ:AはBの祖父母であるCの孫です。
- N番目のいとこ:AはBの(N-1)番目の祖父母であるCの(N-1)番目の孫。
- いとこ、M回削除:AはBのM番目の祖父母であるCの孫、またはAはMの孫です Cの祖父母であるB。
- 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のものではありません)
Ptolemy家系図
写真は例示です。以下のデータは、ウィキペディアの記事「プトレマイオス朝」からのものです。
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