少し遺伝学のレッスン
誰かの目に見える形質や表現型にしかアクセスできない場合、実際の遺伝情報や各家族の遺伝子型を把握するために、しばしば家族歴の血統が使用されます。
単純な支配を扱う場合、単純な家系図チャートは、各人の対立遺伝子、またはそれらが持っている遺伝子のバージョンを把握するのに十分です。単純な支配では、支配的な対立遺伝子(大文字で表される)を持つ人は、他の対立遺伝子に関係なく、常にそのバージョンが表す特性を持ちます。そのバージョンを表現するには、2つの劣性対立遺伝子(小文字で表記)が必要です。言い換えれば、優性対立遺伝子は常にその遺伝子の劣性バージョンをマスクします。血統図の例を次に示します。
ここの各行は世代です。円は女性、男性は正方形、水平線は結婚、垂直線は子供です。ものすごく単純。黒は劣性表現型、白、優性を意味します。上から始めて(対立遺伝子がA
およびであると仮定してa
)、人2がaa
ホモ接合劣性であることがわかります。これは劣性表現型の唯一の可能なオプションだからです。現在、人は劣性の子供を持っているため、どちらかAa
またはAA
優勢な表現型である可能性がありますがAa
、彼は、またはヘテロ接合でなければなりません。他のすべての人に対してこれを行うことができます。2番目の対立遺伝子を把握するための情報がない場合は、次のようにしますA_
。
あなたのタスク
[GenI, GenII, etc.]
健全な形式のような世代リストの形式で家系図を受け取ります。- 各世代は文字列のリストになり、各文字列は人を表します。
- 人々は、ID、表現型、および「つながり」という3つの部分で構成されています。
- IDは、
A
または以外のツリー全体で一意の単一の印刷可能なASCII文字ですa
。(いいえ、チャートに95人以上はいません)。 - それらの表現型は、
A
またはのいずれかa
でA
あり、優性対立遺伝子でありa
、劣性である。 - それらの接続は、接続している他の人のIDのシーケンスです。
- 同じ世代のつながりは結婚であり、異なる世代の子どもと親です。
- 接続は両側で繰り返されます(つまり、夫は彼が妻の夫であると言い、妻は彼女が妻の夫であると言います)。
- できる限り全員の遺伝子型を把握する必要があります。
- 人の代わりに同じリストを返し、遺伝子型を同じ位置に置きます。
- 遺伝子型はの
Aa
代わりに順番に出力する必要がありaA
ます。 - 入力形式については少し余裕があります。
- これはコードゴルフなので、バイト単位の最短回答が勝ちです。
例
[["0A1234", "1a0234"], ["2A01", "3a01", "4A015678",
"5a4678"], ["6a45", "7A45","8A45"]] (The one above) ->
[["Aa", "aa"], ["Aa", "aa", "Aa", "aa"], ["aa", "Aa", "Aa"]]
[["0A12", "1A02"], ["2A301", "3a2"]] ->
[["A_", "A_"], ["A_", "aa"]]
ボーナス
- 不完全な共同支配も処理する場合は-30バイト。チャート全体で2つではなく3つの表現型を検出した場合、アルゴリズムに不完全/共同支配を適用します。
A
and のみを変更しa
、idと接続をそのままにすることはできますか(つまりの代わりに[["0A12","1A02"],["2A301","3a2"]]
なりますか)?[["0A_12","1A_02"],["2A_301","3aa2"]]
[["A_","A_"],["A_","aa"]]