Uma pequena lição de genética
Quando você tem acesso apenas aos traços ou fenótipos visíveis de alguém, geralmente é usado um pedigree da história da família para descobrir as informações genéticas reais ou o genótipo de cada membro da família.
Ao lidar com a dominância simples como seremos, um gráfico simples de linhagem será suficiente para descobrir os alelos, ou a versão dos genes que eles possuem, de cada pessoa. Em domínio simples, uma pessoa com um alelo dominante (indicado com uma letra maiúscula) sempre terá a característica que essa versão representa, independentemente do outro alelo. São necessários dois alelos recessivos (indicados com uma letra minúscula) para que essa versão seja expressa. Em outras palavras, o alelo dominante sempre mascara a versão recessiva desse gene. Aqui está um exemplo de um gráfico de linhagem:
Cada linha aqui é uma geração. Círculos são femininos, quadrados masculinos, linhas horizontais são casamento, linhas verticais, filhos. Bem simples. Preto significa fenótipo recessivo, branco, dominante. Começando do topo, (suponha que os alelos sejam A
e a
), sabemos que a pessoa 2 tem aa
, recessivo homozigoto, porque essa é a única opção possível para o fenótipo recessivo. Agora, mesmo que a pessoa um possa ser um fenótipo dominante, Aa
ou AA
por ser dominante, porque ele tem um filho recessivo, ele deve ser Aa
ou heterozigoto. Você pode fazer isso para todas as outras pessoas. No caso de você não ter qualquer informação que lhe permite descobrir o segundo alelo, isso pode ser feito da seguinte forma: A_
.
Sua tarefa
- Você receberá um gráfico de linhagem na forma de uma lista de gerações, como
[GenI, GenII, etc.]
em qualquer formato sensato. - Cada geração será uma lista de cadeias, cada uma representando uma pessoa.
- As pessoas são compostas de três partes - uma identificação, seu fenótipo e suas "conexões".
- Seu ID é um caractere ASCII imprimível único na árvore inteira, exceto
A
oua
. (Não, não haverá mais de 95 pessoas no gráfico). - Seu fenótipo é um de
A
oua
,A
sendo o alelo dominante ea
sendo recessivo. - Suas conexões são uma sequência de IDs de outras pessoas com as quais eles têm conexões.
- Uma conexão na mesma geração é casamento, em gerações diferentes é filho e pai.
- As conexões são repetidas nos dois lados (ou seja, o marido diz que é marido da esposa e a esposa diz que é marido da esposa).
- Você tem que descobrir os genótipos de todos, tanto quanto possível.
- Retorne a mesma lista, exceto que, em vez de pessoas, coloque seus genótipos na mesma posição.
- O genótipo deve ser emitido em ordem, em
Aa
vez deaA
. - Uma pequena margem de manobra no formato de entrada está correta.
- Este é o código-golfe, pelo que a resposta mais curta em bytes vence.
Exemplos
[["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"]]
Bônus
- -30 bytes se você lidar com incompleto e co-domínio também. Na detecção de três fenótipos em vez de dois no gráfico inteiro, aplique dominância incompleta / co ao seu algoritmo.
A
ea
e deixar os ids e conexões como é (ou seja,[["0A12","1A02"],["2A301","3a2"]]
torna-se[["0A_12","1A_02"],["2A_301","3aa2"]]
, em vez de[["A_","A_"],["A_","aa"]]
)?