class String

  SoundexChars = 'BFPVCGJKQSXZDTLMNR'
  SoundexNums  = '111122222222334556'
  SoundexCharsEx = '^' + SoundexChars
  SoundexCharsDel = '^A-Z'

  
  def soundex(census = true)
    str = self.upcase.delete(SoundexCharsDel)
    str[0,1] + str[1..-1].delete(SoundexCharsEx).
                          tr_s(SoundexChars, SoundexNums)\
                          [0 .. (census? 2: -1)].
                          ljust(3, '0') rescue ''
  end

  def sounds_like(other)
    self.soundex == other.soundex
  end
end

%w(Soundex Sownteks Example Ekzampul foo bar).each_slice(2) do |word1, word2|
  [word1, word2].each {|word| puts '%-8s ->%s' % [word, word.soundex]}

  print 
  print word1.sounds_like(word2)? : 
  print 
end