Skip to content

Instantly share code, notes, and snippets.

@cthoyt
Last active January 27, 2016 16:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cthoyt/6ca3a3e0bf0d92754619 to your computer and use it in GitHub Desktop.
Save cthoyt/6ca3a3e0bf0d92754619 to your computer and use it in GitHub Desktop.
Solves the BLAST Problem from Bioinformatics Class on 27.01.16
#!/usr/bin/env python
# Author: Charlie Hoyt
import itertools as itt
s = {
('A','A'): 5,
('A','R'): -2,
('A','N'): -1,
('A','D'): -2,
('R','A'): -2,
('R','R'): 7,
('R','N'): -1,
('R','D'): -2,
('N','A'): -1,
('N','R'): -1,
('N','N'): 7,
('N','D'): 2,
('D','A'): -2,
('D','R'): -2,
('D','N'): 2,
('D','D'): 8
}
alphabet = "ARND"
target ="RRDNARD"
substring_len = 4
threshold = 3
valid_count = 0
# iterate over all possible elements of alphabet^substring_len
for perm in itt.product(alphabet, repeat=substring_len):
# start with worst possible score
max_score = min(s.values()) * substring_len
# slide window and calculate score for each
for i in range(len(target) - substring_len):
score = sum(s[matching] for matching in zip(perm, target[i:i + substring_len]))
if max_score < score:
max_score = score
if threshold <= max_score:
print(''.join(perm), max_score)
valid_count += 1
print(valid_count)
# Answer: 238
@cthoyt
Copy link
Author

cthoyt commented Jan 27, 2016

Full output:

AAAR 9
AANA 8
AANR 3
AANN 5
AADA 3
AADR 3
AADN 11
AADD 6
ARAR 9
ARAN 10
ARAD 5
ARRN 10
ARRD 5
ARNA 8
ARNR 6
ARNN 14
ARND 9
ARDA 12
ARDR 12
ARDN 20
ARDD 15
ANAA 8
ANAR 17
ANAN 9
ANAD 8
ANRA 4
ANRR 10
ANNA 12
ANNR 11
ANNN 6
ANND 5
ANDA 7
ANDR 10
ANDN 12
ANDD 7
ADAA 10
ADAR 12
ADAN 4
ADAD 3
ADRA 10
ADRR 5
ADRN 4
ADRD 3
ADNA 18
ADNR 11
ADNN 12
ADND 11
ADDA 13
ADDR 6
ADDN 11
ADDD 6
RAAA 9
RAAR 9
RAAN 10
RAAD 5
RARA 9
RARN 10
RARD 5
RANA 17
RANR 10
RANN 14
RAND 10
RADA 12
RADR 12
RADN 20
RADD 15
RRAA 11
RRAR 11
RRAN 19
RRAD 14
RRRA 11
RRRR 11
RRRN 19
RRRD 14
RRNA 17
RRNR 15
RRNN 23
RRND 18
RRDA 21
RRDR 21
RRDN 29
RRDD 24
RNAA 13
RNAR 17
RNAN 11
RNAD 8
RNRA 13
RNRR 10
RNRN 11
RNRD 6
RNNA 21
RNNR 14
RNNN 15
RNND 14
RNDA 16
RNDR 13
RNDN 21
RNDD 16
RDAA 19
RDAR 12
RDAN 13
RDAD 12
RDRA 19
RDRR 12
RDRN 13
RDRD 12
RDNA 27
RDNR 20
RDNN 21
RDND 20
RDDA 22
RDDR 15
RDDN 20
RDDD 15
NAAA 4
NAAR 13
NAAN 5
NAAD 4
NARR 6
NANA 9
NANR 7
NANN 6
NADA 4
NADR 6
NADN 12
NADD 7
NRAA 4
NRAR 13
NRAN 11
NRAD 6
NRRA 3
NRRR 6
NRRN 11
NRRD 6
NRNA 9
NRNR 7
NRNN 15
NRND 10
NRDA 13
NRDR 13
NRDN 21
NRDD 16
NNAA 12
NNAR 21
NNAN 13
NNAD 12
NNRA 5
NNRR 14
NNRN 6
NNRD 5
NNNA 13
NNNR 15
NNNN 7
NNND 6
NNDA 8
NNDR 14
NNDN 13
NNDD 8
NDAA 11
NDAR 16
NDAN 8
NDAD 7
NDRA 11
NDRR 9
NDRN 5
NDRD 4
NDNA 19
NDNR 12
NDNN 13
NDND 12
NDDA 14
NDDR 9
NDDN 12
NDDD 7
DAAA 10
DAAR 19
DAAN 11
DAAD 10
DARA 3
DARR 12
DARN 4
DARD 3
DANA 8
DANR 13
DANN 5
DAND 4
DADA 3
DADR 12
DADN 11
DADD 6
DRAA 10
DRAR 19
DRAN 11
DRAD 10
DRRA 3
DRRR 12
DRRN 10
DRRD 5
DRNA 8
DRNR 13
DRNN 14
DRND 9
DRDA 12
DRDR 12
DRDN 20
DRDD 15
DNAA 18
DNAR 27
DNAN 19
DNAD 18
DNRA 11
DNRR 20
DNRN 12
DNRD 11
DNNA 12
DNNR 21
DNNN 13
DNND 12
DNDA 11
DNDR 20
DNDN 12
DNDD 11
DDAA 13
DDAR 22
DDAN 14
DDAD 13
DDRA 10
DDRR 15
DDRN 7
DDRD 6
DDNA 18
DDNR 16
DDNN 12
DDND 11
DDDA 13
DDDR 15
DDDN 11
DDDD 6
238

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment