module Edits::Hamming

Implements Hamming distance algorithm

@see en.wikipedia.org/wiki/Hamming_distance

Public Class Methods

distance(seq1, seq2) click to toggle source

Calculate the Hamming distance between two sequences.

@note A true distance metric, satisfies triangle inequality. @example

Edits::Hamming.distance("explorer", "exploded")
# => 2

@param seq1 [String, Array] @param seq2 [String, Array] @return [Integer] distance, 0 (identical) or greater (more distant)

# File lib/edits/hamming.rb, line 17
def self.distance(seq1, seq2)
  # if seq1.is_a?(Integer) && seq2.is_a?(Integer)
  #   return (seq1 ^ seq2).to_s(2).count("1")
  # end

  length = seq1.length < seq2.length ? seq1.length : seq2.length
  diff = (seq1.length - seq2.length).abs

  length.times.reduce(diff) do |distance, i|
    seq1[i] == seq2[i] ? distance : distance + 1
  end
end