Mała lekcja genetyki
Kiedy masz dostęp tylko do widocznych cech lub fenotypu danej osoby, rodowód z jej historii rodzinnej jest często wykorzystywany do ustalenia faktycznej informacji genetycznej lub genotypu każdego członka rodziny.
Gdy mamy do czynienia z prostą dominacją, jaką będziemy, wystarczy prosty wykres rodowodowy, aby obliczyć allele lub wersję genów, które mają, każdej osoby. W zwykłej dominacji osoba z dominującym allelem (oznaczona wielką literą) zawsze będzie miała cechę, którą reprezentuje ta wersja, bez względu na inny allel. Wyrażenie tej wersji wymaga dwóch recesywnych alleli (oznaczonych małą literą). Innymi słowy, dominujący allel zawsze maskuje recesywną wersję tego genu. Oto przykład schematu rodowodowego:
Każdy rząd tutaj jest pokoleniem. Kręgi to kobiety, kwadraty mężczyzn, poziome linie to małżeństwo, pionowe linie dzieci. Dość proste. Czarny oznacza fenotyp recesywny, biały, dominujący. Zaczynając od góry (zakładając, że allele są A
i a
), wiemy, że osoba 2 ma aa
homozygotyczny recesywny, ponieważ jest to jedyna możliwa opcja fenotypu recesywnego. Teraz, mimo że osoba może być fenotypem dominującym Aa
albo AA
być dominującym, ponieważ ma recesywne dziecko, musi być Aa
heterozygotyczna. Możesz to zrobić dla wszystkich innych ludzi. W przypadku nie masz żadnych informacji, które pozwala, aby dowiedzieć się drugi allel, można to zrobić tak: A_
.
Twoje zadanie
- Otrzymasz wykres rodowy w formie listy pokoleń, jak
[GenI, GenII, etc.]
w dowolnym rozsądnym formacie. - Każde pokolenie będzie listą ciągów, przy czym każdy ciąg reprezentuje osobę.
- Ludzie składają się z trzech części - identyfikatora, ich fenotypu i „powiązań”.
- Ich identyfikator to pojedyncza postać ascii do wydrukowania, która jest unikalna w całym drzewie innym niż
A
luba
. (Nie, na wykresie nie będzie więcej niż 95 osób). - Ich fenotyp jest jednym
A
alboa
,A
będąc allel dominujący ia
jest recesywny. - Ich połączenia są sekwencją identyfikatorów innych osób, z którymi mają powiązania.
- Związkiem w tym samym pokoleniu jest małżeństwo, w różnych pokoleniach dziecko i rodzic.
- Połączenia są powtarzane po obu stronach (tj. Mąż powiedział, że jest mężem żony, a żona mówi, że jest mężem żony).
- Musisz jak najwięcej dowiedzieć się o genotypach wszystkich.
- Zwróć tę samą listę, z wyjątkiem tego, że zamiast ludzi umieść swoje genotypy w tej samej pozycji.
- Genotyp musi być wyprowadzany w takiej kolejności, a
Aa
nieaA
. - Trochę swobody w zakresie formatu wejściowego jest w porządku.
- To jest golf golfowy, więc wygrywa najkrótsza odpowiedź w bajtach .
Przykłady
[["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"]]
Premia
- -30 bajtów, jeśli masz również do czynienia z niekompletnością i współdominacją . Po wykryciu trzech fenotypów zamiast dwóch na całym wykresie zastosuj niekompletną / ko-dominację w swoim algorytmie.
źródło
A
ia
i zostawić identyfikatory i połączenia jak jest (czyli[["0A12","1A02"],["2A301","3a2"]]
staje się[["0A_12","1A_02"],["2A_301","3aa2"]]
zamiast[["A_","A_"],["A_","aa"]]
)?Odpowiedzi:
05AB1E , 39 bajtów
Port mojej odpowiedzi Java .
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
Java 10,
356349340 bajtówWypróbuj online.
Ogólne wyjaśnienie:
1) Każdy
a
zawsze się stanieaa
2a) Jeśli dziecko
A
ma rodzicówaa
iA
stanie sięAa
2b) Jeśli dziecko
A
ma rodzicówA
iA
stanie sięA_
2c) (Dziecko nie
A
może mieć rodzicówaa
iaa
)3a) Jeśli rodzic
A
ma co najmniej jedno dzieckoa
, stanie sięAa
3b) Jeśli rodzic
A
ma tylko dzieciA
, stanie sięA_
Objaśnienie kodu:
źródło