Невеликий урок генетики
Коли ви маєте доступ лише до чиїхось видимих рис або фенотипу , часто використовується родовід їх сімейної історії для з'ясування фактичної генетичної інформації або генотипу кожного члена сім'ї.
Коли ми маємо справу з простим домінуванням, як ми будемо, буде достатньо простого родоводу, щоб визначити алелі чи версії генів у кожної людини. У простому домінуванні людина з домінуючим алелем (позначається з великої літери) завжди матиме рису, яку представляє ця версія, незалежно від іншого алеля. Для вираження цієї версії потрібні два рецесивні алелі (позначені малою літерою). Іншими словами, домінантний алель завжди маскує рецесивну версію цього гена. Ось приклад діаграми родоводу:
Кожен рядок тут - це покоління. Кола жіночі, квадрати чоловічої статі, горизонтальні лінії одруження, вертикальні лінії дітей. Досить просто. Чорний означає рецесивний фенотип, білий, домінуючий. Починаючи зверху, (припустимо, алелі є A
і a
), ми знаємо, що у людини 2 є aa
гомозиготний рецесивний, оскільки це єдиний можливий варіант рецесивного фенотипу. Тепер, хоча людина може бути Aa
або AA
домінантним фенотипом, оскільки у нього є рецесивна дитина, він повинен бути Aa
або гетерозиготний. Це можна зробити для всіх інших людей. У разі , якщо у вас немає ніякої інформації , яка дозволяє з'ясувати другу аллель, це може бути зроблено в такий спосіб: A_
.
Ваше завдання
- Ви отримаєте родовідну діаграму у вигляді списку поколінь, як
[GenI, GenII, etc.]
у будь-якому розумному форматі. - Кожне покоління буде складати список рядків, кожен рядок представляє людину.
- Люди складаються з трьох частин - ідентифікатор, їх фенотип і їх "зв'язки".
- Їх ідентифікатор - це єдиний символ для друку ascii, який є унікальним для всього дерева, крім
A
абоa
. (Ні, у графіку не буде більше 95 осіб). - Їх фенотип є одним з
A
абоa
,A
будучи домінуючим алелем, іa
є рецесивним. - Їх з'єднання - це послідовність ідентифікаційних даних інших людей, з якими вони мають зв'язки.
- Зв'язок в одному поколінні - це шлюб, у різних поколінь - дитина і батько.
- Зв'язки повторюються з обох сторін (тобто чоловік каже, що він чоловік дружини, а дружина каже, що він чоловік дружини).
- Ви повинні якомога більше з'ясувати генотипи кожного.
- Поверніть той самий список, за винятком людей, ставити їх генотипи в ту саму позицію.
- Генотип повинен бути виведений для того, щоб
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
і залишити ідентифікатори і з'єднання як є (тобто[["0A12","1A02"],["2A301","3a2"]]
стає[["0A_12","1A_02"],["2A_301","3aa2"]]
замість[["A_","A_"],["A_","aa"]]
)?