-
Notifications
You must be signed in to change notification settings - Fork 0
/
dna.py
67 lines (56 loc) · 2.01 KB
/
dna.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import sys
import csv
# Utilizando o programa da forma correta com 3 parâmetros
if len(sys.argv) != 3:
sys.exit("Usage: python dna.py CSV_FILE TEXT_FILE")
num_row = 0
# Lendo o CSV dentro de uma variável dict e contando as linhas
database = {}
with open(sys.argv[1]) as file:
reader = csv.DictReader(file)
for row in reader:
num_row += 1
for column, value in row.items():
database.setdefault(column, []).append(value)
# Lendo o TXT dentro de uma variável
with open(sys.argv[2]) as f:
dna = f.read()
match = []
match_bkp = []
# inicializando a lista de match
for m in range(num_row-1):
match.append(m)
# for em todas as chaves
for key in database.keys():
contador = 0
maximo = 0
# descartando o nome
if key != 'name':
# Procurando o primeiro match do DNA
for i in range((len(dna)-len(key))):
if dna[i:(len(key)+i)] == key:
# Encontrando o primeiro, somando as repetições
for k in range(i, ((len(dna)-len(key))), len(key)):
if dna[k:(len(key)+k)] == key:
contador += 1
else:
# Se as repições forem maiores que a anterior substitui
if contador > maximo:
maximo = contador
contador = 0
break
# Varendo os nomes a procura de matchs com aquele total
for m in range(num_row-1):
if int(database[key][m]) == maximo:
# Se não tiver na variável match é pq os valores anteriores não fecharam somente o atual
if match.count(m) > 0:
match_bkp.append(m)
# Se não achou nenhum que combine sai do programa e "No match"
if len(match_bkp) == 0:
print('No match')
exit()
# Salvando os novos matchs
match.clear()
match = match_bkp.copy()
match_bkp.clear()
print(database["name"][match[0]])