Skip to content

Instantly share code, notes, and snippets.

@adamloo85
Created July 31, 2014 21:16
Show Gist options
  • Save adamloo85/20bce855a3d9cc98e73f to your computer and use it in GitHub Desktop.
Save adamloo85/20bce855a3d9cc98e73f to your computer and use it in GitHub Desktop.
A short script that takes a DNA strand, does a pattern search and returns # the indexes of all matches.
# Author: Adam Loo
# Date: 7/31/2014
# A short script that takes a DNA strand, does a pattern search and returns
# the indexes of all matches.
STRAND = "aggcgtatgcgatcctgaccatgcaaaactccagcgtaaatacctagccatggcgacacaaggcgcaaga" +
"caggagatgacggcgtttagatcggcgaaatattaaagcaaacgacgatgacttcttcgggaaattagttccctactcgt" +
"gtactccaattagccataacactgttcgtcaagatatagggggtcacccatgaatgtcctctaaccagaccatttcgtta" +
"cacgaacgtatctgatgacttcttcgggaaattagttccctactcgtgtactccaattagccataacactgttcgtcaag" +
"atatagggggtcacccatgaatgtcctctaaccagaccatttcgttacacgaacgtatcttcggggcgtatgcgatcctg" +
"accatgcaaaactccagcgtaaatacctagccatggcgacacaaggcgcaagacaggagatgacggcgtttagatcggcg" +
"aaatattaaagcaaacgacgatgacttcttcgggaaattagttccctactcgtgtactccaattagccataacactgttc" +
"gtcaagatatagggggtcacccatgaatgtcctctaaccagaccatttcgttacacgaacgtatctgatgacttcttcgg" +
"gaaattagttccctactcgtgtactccaattagccataacactgttcgtcaagatatagggggtcacccatgaatgtcct" +
"ctaaccagaccatttcgttacacgaacgtatcttcggggcgtatgcgatgaaattagttccctactcgtgtactccaatt" +
"agccataacactgttcgtcaagatatagggggtcacccatgaatgtcctctaaccagaccatttcgttacacgaacgtat" +
"ctgatgacttcttcgggaaattagttccctactcgtgtactccaattagccataacactgttcgtcaagatatagggggt" +
"cacccatgaatgtcctctaaccagaccatttcgttacacgaacgtatcttcggggcgtat"
PATTERN = "ctccag"
def reverse_strand(strand, out = '')
reverse = strand.reverse
# DNA opposites
key = {
a: 't',
t: 'a',
c: 'g',
g: 'c'
}
reverse.length.times do |i|
out += key[reverse[i].to_sym]
end
return out
end
def search_strand(strand, pattern)
out = {
pattern: pattern,
matches: []
}
strand.length.times do |i|
new_pattern = strand[i...i+pattern.length]
if new_pattern == pattern
out[:matches] << {start: i, finish: i+pattern.length}
end
end
return out
end
puts "Direct: #{search_strand(STRAND, PATTERN)}"
puts "Reverse: #{search_strand(reverse_strand(STRAND), PATTERN)}"
# =>
# Direct: {:pattern=>"ctccag", :matches=>[{:start=>28, :finish=>34}, {:start=>401, :finish=>407}]}
# Reverse: {:pattern=>"ctccag", :matches=>[]}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment