Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions hamming.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#class Hamming
# def self.compute(dna,sdna)
# c = []
# d = dna.split('')
# s = sdna.split('')
# if s.length != d.length
# raise ArgumentError.new("First or second strand to long") #could have used unless
# end
# not_matching_element = d.dup
# f = 0
# until f == s.length
# s.each_index do |i|
# if not_matching_element[i] != s[i]
# c << s[i]
#
# end
# f += 1
# end
# end
# return c.length
# end
# end
#
#
#


class Hamming
def self.compute(dna,sdna, counter = 0)
if dna.length != sdna.length
raise ArgumentError
end

if dna.length == 0 && sdna.length == 0
return counter

elsif
dna[0] != sdna[0]
counter += 1
end
return self.compute(dna[1..-1], sdna[1..-1], counter)

end
end
26 changes: 12 additions & 14 deletions hamming_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,72 +4,70 @@

class HammingTest < Minitest::Test
def test_identical_strands
skip

assert_equal 0, Hamming.compute('A', 'A')
end

def test_long_identical_strands
skip
assert_equal 0, Hamming.compute('GGACTGA', 'GGACTGA')
end

def test_complete_distance_in_single_nucleotide_strands
skip
assert_equal 1, Hamming.compute('A', 'G')
end

def test_complete_distance_in_small_strands
skip

assert_equal 2, Hamming.compute('AG', 'CT')
end

def test_small_distance_in_small_strands
skip

assert_equal 1, Hamming.compute('AT', 'CT')
end

def test_small_distance
skip

assert_equal 1, Hamming.compute('GGACG', 'GGTCG')
end

def test_small_distance_in_long_strands
skip

assert_equal 2, Hamming.compute('ACCAGGG', 'ACTATGG')
end

def test_non_unique_character_in_first_strand
skip

assert_equal 1, Hamming.compute('AGA', 'AGG')
end

def test_non_unique_character_in_second_strand
skip

assert_equal 1, Hamming.compute('AGG', 'AGA')
end

def test_large_distance
skip

assert_equal 4, Hamming.compute('GATACA', 'GCATAA')
end

def test_large_distance_in_off_by_one_strand
skip

assert_equal 9, Hamming.compute('GGACGGATTCTG', 'AGGACGGATTCT')
end

def test_empty_strands
skip

assert_equal 0, Hamming.compute('', '')
end

def test_disallow_first_strand_longer
skip

assert_raises(ArgumentError) { Hamming.compute('AATG', 'AAA') }
end

def test_disallow_second_strand_longer
skip

assert_raises(ArgumentError) { Hamming.compute('ATA', 'AGTG') }
end
end