From ba8e2701ea118c301dee4d2e93213fb93000eafb Mon Sep 17 00:00:00 2001 From: Risha Date: Fri, 13 May 2016 16:37:45 -0700 Subject: [PATCH] finished recursion --- hamming.rb | 25 +++++++++++++++++++++++++ hamming1.rb | 20 ++++++++++++++++++++ hamming_test.rb | 1 - 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 hamming.rb create mode 100644 hamming1.rb diff --git a/hamming.rb b/hamming.rb new file mode 100644 index 0000000..693069a --- /dev/null +++ b/hamming.rb @@ -0,0 +1,25 @@ + # Hamming Test Project +class Hamming + + def self.compute(str1, str2) + puts "str1 = #{str1}, str2 = #{str2}" + # Base case: no more characters to process / empty string + return 0 if str1.length <= 0 # str1 == "" , str1.empty? + + # Recursive case: peel off one letter, recurse, and add 1 if different + first = str1[0] + second = str2[0] + if first != second + puts "First letters are different" + return 1 + compute(str1[1..-1],str2[1..-1]) + else + return 0 + compute(str1[1..-1],str2[1..-1]) + end + + end + +end + +#str1('AT') = 1 +#str2('CT') = 1 +puts Hamming.compute("ATGAC","ACTAC") diff --git a/hamming1.rb b/hamming1.rb new file mode 100644 index 0000000..ae29926 --- /dev/null +++ b/hamming1.rb @@ -0,0 +1,20 @@ +# Hamming Test Project +class Hamming + + def self.compute(str1, str2) + # hamming distance assumes strings of equal length + # .chars splits a string into an array + str1 = str1.chars + str2 = str2.chars + + raise ArgumentError unless str1.length == str2.length #error when user makes an arror, not an error with syntax + + differences = 0 + str1.each_index do |ind| + if str1[ind] != str2[ind] + differences += 1 + end + end + return differences + end +end diff --git a/hamming_test.rb b/hamming_test.rb index 2d1f9d7..f3feb79 100644 --- a/hamming_test.rb +++ b/hamming_test.rb @@ -4,7 +4,6 @@ class HammingTest < Minitest::Test def test_identical_strands - skip assert_equal 0, Hamming.compute('A', 'A') end