Friday, June 12, 2009

Character Frequency Checker in Ruby

Character frequency checker which is implemented in Ruby, can be used to find the number of occurrences of each consecutive series of the same character in a given string. In the inspected string, that consecutive series of the each character is replaced by a two element array where the first element is a string containing the character, and the second element is the number of repetitions. For example,if the method receives a parameter like "aaassssddddfgh", then the result will be stored in an array where its elements are:
[[a,3],[s,4],[d,4],f,g,h]
class CharacterFrequency

  def char_frequency(sequence)
    return_array = Array.new
    if (!sequence.eql?(nil) && sequence.size>0)
      puts "String to check for character frequency is : "+sequence
      last_checked_char_index = 0
      for i in 0...sequence.size
        next_char_index = last_checked_char_index + 1
        repeating_char_count = 1
        if(i >= last_checked_char_index)
          for j in i...sequence.size
            if(sequence[j].eql?(sequence[next_char_index]))
              repeating_char_count = repeating_char_count + 1
              next_char_index = next_char_index + 1
              last_checked_char_index = next_char_index
            else
              last_checked_char_index = next_char_index
              arr = Array.new
              if repeating_char_count > 1
                arr = sequence[i].chr.to_s+","+repeating_char_count.to_s
              elsif repeating_char_count == 1
                arr = sequence[i].chr.to_s
              end
              return_array.push(arr)
            break
          end
        end        
      end      
    end
    if(!return_array.empty? && return_array.length >0)
      for indice in 0...return_array.size
        puts return_array[indice]
      end
    end
    else
      puts "Empty or null sequence!"
  end
  end
end

app = CharacterFrequency.new
app.char_frequency("laaamburtiiifikasssssyon")
app.char_frequency("aaassssddddfgh")
app.char_frequency("abcdeee")
app.char_frequency("a")
app.char_frequency("ab")
app.char_frequency("abBgGvV122")
app.char_frequency("asdadddssf")
app.char_frequency("")
app.char_frequency(nil)


Save your script into frequency.rb file and run as follows. It will loop through the created array and display elements at console. Tested with ruby 1.8.7 on ubuntu9.04.
$ ruby frequency.rb