diff --git a/hamming.rb b/hamming.rb new file mode 100644 index 0000000..4ab3166 --- /dev/null +++ b/hamming.rb @@ -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 diff --git a/hamming_test.rb b/hamming_test.rb index 2d1f9d7..1ab7602 100644 --- a/hamming_test.rb +++ b/hamming_test.rb @@ -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