Ejercicio: 1Eva2018TI_T1 Busca especie con ADN
Propuesta de solución en Python:
primero se obtiene una secuencia del listado
i = 0
secuencia = Listado[i]
Para obtener la inversa se empieza copiando desde el último caracter de la secuencia con índice j=m-1, siendo m la cantidad de caracteres de la secuencia.
# calcula la inversa
m = len(secuencia)
inversa = ''
j = m-1
while not(j<0):
inversa = inversa + secuencia[j]
j = j-1
el resultado esperado es:
las secuencias que pertenecen son: 1
Secuencia: ATTTGCTTGCTATTTAAACCGGTTATGCATAGCGC
indices de inversa: [0, 2, 7, 25, 29]
>>>
El análisis se realiza en dos partes: desde j=0 hasta mitad = m//2. Luego desde la mitad hasta m.
Al comparar la referencia con una sección de la inversa, se pueden almacenar los índices de la coincidencia en otra lista.
Algoritmo en Python
# CCPG1001 Fundamentos de Programación FIEC-ESPOL
# 1Eva_IT2018_T1 Busca especie con ADN
# propuesta de solución: edelros@espol.edu.ec
# INGRESO
Listado = ['ATTTGCTTGCTATTTAAACCGGTTATGCATAGCGC',
'ATTAGCCGCTATCGA']
Referencia = 'CG'
# PROCEDIMIENTO
n = len(Listado)
tref = len(Referencia)
pertenece = []
i = 0
while not(i>=1):
secuencia = Listado[i]
indices = []
# calcula la inversa
m = len(secuencia)
inversa = ''
j = m-1
while not(j<0):
inversa = inversa + secuencia[j]
j = j-1
# Analiza las partes, mitad
mitad = m//2
veces1 = 0
veces2 = 0
j = 0 # primera mitad
while not(j>=mitad):
seccion = inversa[j:j+tref]
if (seccion == Referencia):
veces1 = veces1 + 1
indices.append(j)
j = j + 1
j = mitad # segunda mitad
while not(j>=m):
seccion = inversa[j:j+tref]
if (seccion == Referencia):
veces2 = veces2 + 1
indices.append(j)
j = j + 1
# Revisa si pertenece a especie
total = veces1 + veces2
if (veces2==2 and total>=4):
pertenece.append([secuencia, indices])
# siguiente secuencia de listado
i = i + 1
# SALIDA
# print(pertenece)
tp = len(pertenece)
print('las secuencias que pertenecen son: ', tp)
i = 0
while not(i>=tp):
print('Secuencia: ',pertenece[i][0])
print('indices de inversa:',pertenece[i][1])
i = i + 1
Tarea: Convertir a funciones las secciones de:
- Inversa de la secuencia creainversa(secuencia)
- Conteo de referencias en mitades de secuencia cuentareferencia(mitadsecuencia)
- Crear vector de índices donde se encuentra la referencia entregaindices(inversa)