From: Adam Prescott Date: 2011-03-10T08:42:18+09:00 Subject: Re: [Code] Touch Typing Tutor What do you think of my code? --e0cb4e43cf1163bd34049e1547c8 Content-Type: text/plain; charset=UTF-8 On Wed, Mar 9, 2011 at 11:27 PM, JP Billaud wrote: > class String > def compare_sum_errors other > cnt = [self.length, other.length].min > > (0..(cnt-1)).inject(0) do |errors, idx| > next errors + 1 if self[idx] != other[idx] > errors > end + (self.length - other.length).abs > end > end > > str1 = "test origin string" > str2 = "test diff string" > > puts str1.compare_sum_errors str2 > This isn't the best use of inject. :) This is much more readable, I find: def count_errors(first, second) # reorder things so that first is always <= second first, second = [first, second].sort_by { |s| s.length } errors = 0 first.chars.zip(second.chars).each do |f, s| errors += 1 if f != s end # over-typing is an error errors + (second.length - first.length) end count_errors("hello", "helloo") #=> 0 count_errors("hello", "helllo") #=> 2 str1 = "test origin string" str2 = "test diff string" count_errors(str1, str2) #=> 13 (same result as the inject) --e0cb4e43cf1163bd34049e1547c8--