Manuel Neuhauser

Ruby, PHP, JavaScript, SQL, HTML, CSS, Networking, Security

Nag a Ram

| Comments

An anagram is a type of word play, the result of rearranging the letters of a word or phrase to produce a new word or phrase, using all the original letters exactly once; for example orchestra can be rearranged into carthorse. Someone who creates anagrams may be called an “anagrammatist”. Source: Wikipedia


The core of a recent code challange included finding out whether one string is an anagram of another. Now this task can be accomplished with a couple of iterators and character comparison, but such an answer would yield code that is too complex looking for what I needs to accomplish and it may be difficult to read.

Rather than picking each letter from the first string and finding it in the second, I wanted to compare the two strings in a single step. First, the strings both need to be sorted and in order to do this, they first had to be converted to an array of single letters. With a little String#split and Array#sort magic the resulting arrays can easily be compared.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Anagram

  def initialize(word)
    @word = word
    @word_match_string = generate_match_string(word)
  end

  def match(words)
    words.select do |potential_anagram|
      @word_match_string == generate_match_string(potential_anagram)
    end
  end

  private

  def generate_match_string(word)
    word.downcase.split("").sort
  end

end

Comments