Eine kleine Lektion in Genetik
Wenn Sie nur Zugriff auf die sichtbaren Merkmale oder den Phänotyp einer Person haben, wird häufig ein Stammbaum ihrer Familiengeschichte verwendet, um die tatsächliche genetische Information oder den Genotyp jedes Familienmitglieds herauszufinden .
Wenn wir uns mit einfacher Dominanz befassen , reicht ein einfaches Stammbaumdiagramm aus, um die Allele oder die Version der Gene, die sie haben, jeder Person herauszufinden. In der einfachen Dominanz hat eine Person mit einem dominanten Allel (mit einem Großbuchstaben bezeichnet) immer die Eigenschaft, die diese Version darstellt, unabhängig von dem anderen Allel. Es braucht zwei rezessive Allele (mit einem Kleinbuchstaben bezeichnet), um diese Version auszudrücken. Mit anderen Worten, das dominante Allel maskiert immer die rezessive Version dieses Gens. Hier ist ein Beispiel eines Stammbaums:
Jede Reihe hier ist eine Generation. Kreise sind weiblich, Männer Quadrate, horizontale Linien sind Ehe, vertikale Linien Kinder. Ziemlich einfach. Schwarz bedeutet rezessiver Phänotyp, weiß, dominant. Ausgehend von der Spitze (angenommen, die Allele sind A
und a
) wissen wir, dass Person 2 aa
homozygot rezessiv ist, da dies die einzig mögliche Option für den rezessiven Phänotyp ist. Jetzt, obwohl Person man entweder sein Aa
oder AA
dominanter Phänotyp sein könnte, weil er ein rezessives Kind hat, muss er Aa
heterozygot sein. Sie können dies für alle anderen Menschen tun. Im Fall , dass Sie keine Informationen haben , dass Sie das zweite Allel , um herauszufinden , ermöglicht, kann es wie so geschehen: A_
.
Deine Aufgabe
- Sie erhalten eine Ahnentafel in Form einer Liste von Generationen wie
[GenI, GenII, etc.]
in jedem vernünftigen Format. - Jede Generation wird eine Liste von Zeichenfolgen sein, wobei jede Zeichenfolge eine Person darstellt.
- Die Menschen bestehen aus drei Teilen - einer ID, ihrem Phänotyp und ihren "Verbindungen".
- Ihre ID ist ein einzelnes druckbares ASCII-Zeichen, das in der gesamten Struktur außer
A
oder eindeutig ista
. (Nein, das Diagramm enthält nicht mehr als 95 Personen.) - Ihr Phänotyp ist einer von
A
odera
,A
das dominierende Allel zu sein unda
rezessiv zu sein. - Ihre Verbindungen sind eine Folge von IDs anderer Personen, mit denen sie Verbindungen haben.
- Eine Verbindung in der gleichen Generation ist die Ehe, in verschiedenen Generationen sind Kind und Eltern.
- Die Verbindungen wiederholen sich auf beiden Seiten (dh der Ehemann sagt, er sei ein Ehemann der Ehefrau, und die Ehefrau sagt, sie sei ein Ehemann der Ehefrau).
- Sie müssen die Genotypen aller so gut wie möglich herausfinden.
- Geben Sie dieselbe Liste zurück, mit der Ausnahme, dass anstelle von Personen deren Genotypen an derselben Position platziert werden.
- Der Genotyp hat , um so ausgegeben werden ,
Aa
stattaA
. - Ein wenig Spielraum beim Eingabeformat ist in Ordnung.
- Dies ist Code-Golf, also gewinnt die kürzeste Antwort in Bytes .
Beispiele
[["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"]]
Bonus
- -30 Bytes, wenn Sie auch mit Unvollständigkeit und Co-Dominanz zu tun haben . Wenden Sie beim Erkennen von drei anstelle von zwei Phänotypen im gesamten Diagramm die Unvollständigkeit / Ko-Dominanz auf Ihren Algorithmus an.
quelle
A
unda
und lassen Sie die IDs und Verbindungen wie (dh[["0A12","1A02"],["2A301","3a2"]]
wird[["0A_12","1A_02"],["2A_301","3aa2"]]
statt[["A_","A_"],["A_","aa"]]
)?Antworten:
05AB1E , 39 Bytes
Port meiner Java-Antwort .
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Java 10,
356349340 BytesProbieren Sie es online aus.
Allgemeine Erklärung:
1) Jeder
a
wird immer werdenaa
2a) Wenn ein Kind
A
Eltern hataa
undA
wirdAa
2b) Wenn ein Kind
A
Eltern hatA
undA
wirdA_
2c) (Es ist nicht möglich, dass ein Kind
A
Eltern hataa
undaa
)3a) Wenn ein Elternteil
A
mindestens ein Kind hata
, wird esAa
3b) Wenn ein Elternteil
A
nur Kinder hatA
, wird esA_
Code Erklärung:
quelle