Une petite leçon de génétique
Lorsque vous n'avez accès qu'aux traits visibles ou au phénotype d' une personne, un pedigree de ses antécédents familiaux est souvent utilisé pour déterminer les informations génétiques réelles ou le génotype de chaque membre de la famille.
Lorsque nous traiterons de la dominance simple comme nous le serons, un simple tableau généalogique suffira pour déterminer les allèles, ou la version des gènes qu'ils ont, de chaque personne. En simple domination, une personne avec un allèle dominant (indiqué par une majuscule) aura toujours le trait que cette version représente, quel que soit l'autre allèle. Il faut deux allèles récessifs (indiqués par une lettre minuscule) pour que cette version soit exprimée. En d'autres termes, l'allèle dominant masque toujours la version récessive de ce gène. Voici un exemple de tableau généalogique:
Ici, chaque rangée est une génération. Les cercles sont féminins, les carrés masculins, les lignes horizontales sont le mariage, les lignes verticales les enfants. Assez simple. Noir signifie phénotype récessif, blanc, dominant. En partant du haut, (supposons que les allèles sont A
et a
), nous savons que la personne 2 a aa
, récessive homozygote parce que c'est la seule option possible pour le phénotype récessif. Maintenant, même si la personne une peut être phénotype dominant Aa
ou AA
être dominante, parce qu'elle a un enfant récessif, elle doit être Aa
ou hétérozygote. Vous pouvez le faire pour toutes les autres personnes. Dans le cas où vous ne disposez pas d'informations qui vous permet de comprendre le second allèle, il peut être fait comme ceci: A_
.
Ta tâche
- Vous recevrez un tableau généalogique sous la forme d'une liste de générations comme
[GenI, GenII, etc.]
dans n'importe quel format sain. - Chaque génération sera une liste de chaînes, chaque chaîne représentant une personne.
- Les personnes sont composées de trois parties - une pièce d'identité, leur phénotype et leurs «connexions».
- Leur ID est un seul caractère ascii imprimable qui est unique dans l'arborescence entière autre que
A
oua
. (Non, il n'y aura pas plus de 95 personnes dans le graphique). - Leur phénotype est l'un des
A
ora
,A
étant l'allèle dominant eta
étant récessif. - Leurs connexions sont une séquence de pièces d'identité d'autres personnes avec lesquelles elles ont des connexions.
- Un lien dans la même génération est le mariage, dans différentes générations, l'enfant et le parent.
- Les liens se répètent des deux côtés (c'est-à-dire que le mari a dit qu'il était le mari de la femme et que la femme disait qu'elle était le mari de la femme).
- Vous devez déterminer autant que possible les génotypes de chacun.
- Renvoyez la même liste, sauf qu'au lieu de personnes, mettez leurs génotypes dans la même position.
- Le génotype doit être sorti dans l'ordre, donc
Aa
au lieu deaA
. - Une petite latitude sur le format d'entrée est très bien.
- C'est le code-golf, donc la réponse la plus courte en octets gagne.
Exemples
[["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"]]
Prime
- -30 octets si vous traitez également avec incomplète et co-dominance . Lors de la détection de trois phénotypes au lieu de deux dans l'ensemble du graphique, appliquez une dominance incomplète / co à votre algorithme.
la source
A
eta
et à laisser les identifiants et les connexions tels quels (c'est-à-dire[["0A12","1A02"],["2A301","3a2"]]
devient[["0A_12","1A_02"],["2A_301","3aa2"]]
au lieu de[["A_","A_"],["A_","aa"]]
)?Réponses:
05AB1E , 39 octets
Port de ma réponse Java .
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
Java 10,
356349340 octetsEssayez-le en ligne.
Explication générale:
1) Tout
a
deviendra toujoursaa
2a) Si un enfant
A
a des parentsaa
etA
cela deviendraAa
2b) Si un enfant
A
a des parentsA
etA
cela deviendraA_
2c) (Il n'est pas possible pour un enfant
A
d'avoir des parentsaa
etaa
)3a) Si un parent
A
a au moins un enfanta
, il deviendraAa
3b) Si un parent
A
n'a que des enfantsA
, il deviendraA_
Explication du code:
la source