Una pequeña lección de genética
Cuando solo tiene acceso a los rasgos o fenotipos visibles de alguien, a menudo se utiliza un pedigrí de sus antecedentes familiares para determinar la información genética real o el genotipo de cada miembro de la familia.
Cuando se trata de un dominio simple como lo seremos, un simple cuadro genealógico será suficiente para descubrir los alelos, o la versión de los genes que tienen, de cada persona. En el dominio simple, una persona con un alelo dominante (denotado con una letra mayúscula) siempre tendrá el rasgo que esa versión representa, sin importar el otro alelo. Se necesitan dos alelos recesivos (denotados con una letra minúscula) para que se exprese esa versión. En otras palabras, el alelo dominante siempre enmascara la versión recesiva de ese gen. Aquí hay un ejemplo de un cuadro genealógico:
Cada fila aquí es una generación. Los círculos son femeninos, los cuadrados masculinos, las líneas horizontales son el matrimonio, las líneas verticales son los niños. Bastante simple. Negro significa fenotipo recesivo, blanco, dominante. Comenzando desde arriba, (supongamos que los alelos son A
y a
), sabemos que la persona 2 tiene un aa
homocigoto recesivo porque esa es la única opción posible para el fenotipo recesivo. Ahora, aunque la persona uno podría ser Aa
o AA
ser un fenotipo dominante, porque tiene un hijo recesivo, debe ser Aa
heterocigótico. Puedes hacer esto para todas las demás personas. En el caso de que no tiene ninguna información que le permite averiguar el segundo alelo, se puede hacer de esta manera: A_
.
Tu tarea
- Recibirá un cuadro genealógico en forma de una lista de generaciones, como
[GenI, GenII, etc.]
en cualquier formato cuerdo. - Cada generación será una lista de cadenas, cada cadena representa una persona.
- Las personas se componen de tres partes: una identificación, su fenotipo y sus "conexiones".
- Su ID es un único carácter ascii imprimible que es único en todo el árbol que no sea
A
oa
. (No, no habrá más de 95 personas en la tabla). - Su fenotipo es uno de
A
oa
,A
siendo el alelo dominante ya
recesivo. - Sus conexiones son una secuencia de identificaciones de otras personas con las que tienen conexiones.
- Una conexión en la misma generación es el matrimonio, en diferentes generaciones es niño y padre.
- Las conexiones se repiten en ambos lados (es decir, el esposo ha dicho que es esposo de esposa, y la esposa dice que ella es esposo de esposa).
- Tienes que descubrir los genotipos de todos lo más posible.
- Devuelva la misma lista, excepto que en lugar de personas, coloque sus genotipos en la misma posición.
- El genotipo debe ser emitido en orden, en
Aa
lugar de hacerloaA
. - Un poco de margen en el formato de entrada está bien.
- Este es el código de golf, por lo que la respuesta más corta en bytes gana.
Ejemplos
[["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"]]
Prima
- -30 bytes si se trata de incompleto y co-dominancia también. En la detección de tres fenotipos en lugar de dos en toda la tabla, aplique dominancia incompleta / co en su algoritmo.
fuente
A
ya
y dejar los identificadores y las conexiones tal cual (es decir, se[["0A12","1A02"],["2A301","3a2"]]
convierte en[["0A_12","1A_02"],["2A_301","3aa2"]]
lugar de[["A_","A_"],["A_","aa"]]
)?Respuestas:
05AB1E , 39 bytes
Puerto de mi respuesta Java .
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
Java 10,
356349340 bytesPruébalo en línea.
Explicación general:
1) cualquiera
a
siempre se convertiráaa
2a) Si un niño
A
tiene padresaa
yA
, se convertirá enAa
2b) Si un niño
A
tiene padresA
yA
, se convertirá enA_
2c) (No es posible que un niño
A
tenga padresaa
yaa
)3a) Si un padre
A
tiene al menos un hijoa
, se convertirá enAa
3b) Si un padre
A
solo tiene hijosA
, se convertiráA_
Explicación del código:
fuente