一点遗传学课
当您仅能访问某人的可见特征或表型时,通常会使用其家族史的血统书来找出每个家庭成员的实际遗传信息或基因型。
当我们将要处理简单的优势时,简单的血统图就足以弄清楚每个人的等位基因或它们拥有的基因的版本。在简单的优势地位下,具有等位基因优势的人(用大写字母表示)将始终具有该版本所代表的特征,而与其他等位基因无关。需要表达两个隐性等位基因(用小写字母表示)。换句话说,优势等位基因总是掩盖该基因的隐性形式。这是血统图的示例:
这里的每一行都是一个世代。圆圈是女性,男性是正方形,水平线是婚姻,垂直线是孩子。很简单 黑色表示隐性表型,白色表示显性。从顶部开始(假设等位基因为A
和a
),我们知道人2具有aa
纯合隐性,因为这是隐性表型的唯一可能选择。现在虽然一个人可能是要么Aa
或者AA
是显性表型,因为他有一个隐性的孩子,他必须Aa
,或杂。您可以为所有其他人执行此操作。如果您没有任何信息可以让您找出第二个等位基因,可以这样进行:A_
。
你的任务
- 您将以世代列表的形式收到血统图,就像
[GenI, GenII, etc.]
任何理智的格式一样。 - 每一代都是一个字符串列表,每个字符串代表一个人。
- 人们由三部分组成-ID,表型和“连接”。
- 它们的ID是一个可打印的ascii字符,在整个树中,除了
A
或以外都是唯一的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个字节(如果您还要处理不完整和共支配)。在检测到三个表型而不是整个图表中的两个表型时,对您的算法应用不完全/共同优势。
A
和a
并保留ID和连接不变(即[["0A12","1A02"],["2A301","3a2"]]
成为[["0A_12","1A_02"],["2A_301","3aa2"]]
而不是[["A_","A_"],["A_","aa"]]
)?