작은 유전학 수업
누군가의 눈에 보이는 특성이나 표현형 에만 접근 할 수있는 경우 , 가족 역사의 가계도는 실제 유전자 정보 또는 각 가족 구성원의 유전자형 을 파악하는 데 종종 사용됩니다 .
우리가 앞으로있을 것처럼 간단한 지배 를 다룰 때 , 간단한 혈통 차트는 대립 인자 또는 그들이 가지고있는 유전자의 버전을 알아 내기에 충분할 것입니다. 지배적 인 대립 유전자 (대문자로 표시)를 가진 사람은 단순한 지배에서 다른 대립 유전자에 관계없이 항상 그 버전이 나타내는 특성을 갖게됩니다. 소문자로 표시되는 열성 대립 유전자 2 개가 해당 버전을 표시해야합니다. 다시 말해서, 우성 대립 유전자는 항상 그 유전자의 열성 버전을가립니다. 가계도의 예는 다음과 같습니다.
여기의 각 행은 세대입니다. 원은 여성, 수컷 사각형, 수평선은 결혼, 수직선은 어린이입니다. 꽤 간단합니다. 검은 색은 열성 표현형, 흰색, 우세를 의미합니다. 맨 처음부터 (대립 유전자가 A
및 이라고 가정 a
), 사람 2는 aa
, 동종 접합성 열성이라는 것을 알고 있습니다. 열성 표현형에 대한 유일한 가능한 옵션이기 때문입니다. 지금은 비록 사람이 하나가 될 수 중 하나 Aa
또는 AA
그 열성 아이를 가지고 있기 때문에, 그는해야합니다, 지배적 인 표현형으로 Aa
, 또는 이형. 당신은 다른 모든 사람들을 위해 이것을 할 수 있습니다. 두 번째 대립 유전자를 알아낼 수있는 정보가없는 경우 다음과 같이 수행 할 수 있습니다 A_
.
당신의 작업
[GenI, GenII, etc.]
제정신 형식 과 같은 세대 목록의 형태로 가계도를 받게 됩니다.- 각 세대는 문자열 목록이며, 각 문자열은 사람을 나타냅니다.
- 사람들은 ID, 표현형 및 "연결"의 세 부분으로 구성됩니다.
- ID는 인쇄 가능한 단일 ASCII 문자이며 전체 트리에서 고유하지 않은 고유 한 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 바이트 전체 차트에서 2 개가 아닌 3 개의 표현형이 탐지 될 때 알고리즘에 불완전한 / 공식 지배력을 적용하십시오.
A
와a
와 같이 (즉,이 ID와 연결을 남겨[["0A12","1A02"],["2A301","3a2"]]
되고[["0A_12","1A_02"],["2A_301","3aa2"]]
대신에[["A_","A_"],["A_","aa"]]
)?