class GoldNumber::GoldNumber

Public Class Methods

new(number, ignored_prefix=nil) click to toggle source
# File lib/GoldNumber.rb, line 6
def initialize(number, ignored_prefix=nil)

    # Receives both Integers and Strings as parameters
    if (number.is_a? Integer) || (number.is_a? String) 
        number = (number.is_a? Integer) ? number.to_s : number 
        @number = (ignored_prefix.nil?) ? number : number[ignored_prefix..-1]
    else
        raise "Wrong parameter type: number is expected to be Integer or String"
    end
end

Public Instance Methods

valid?() click to toggle source

Checks if a number can be classified as a Gold Number @return [Boolean]

# File lib/GoldNumber.rb, line 19
def valid?
    if (identical? || 
        palindrome? ||
        consecutive_ascending? ||
        consecutive_descending? ||
        two_identical_groups? ||
        palindrome_pairs? ||
        repetitive_pairs? ||
        l33t?)
        
        true    
    else
        false
    end
end

Private Instance Methods

consecutive_ascending?() click to toggle source

Checks if the number has consecutive ascending numbers Ex: 12345678

# File lib/GoldNumber.rb, line 58
def consecutive_ascending?
    valid = true
    @number.chars.each_with_index do |char, i|
        if valid && (i < @number.length-1)
            valid = (char.to_i+1 == @number[i+1].to_i)
        end
    end
    valid
end
consecutive_descending?() click to toggle source

Checks if a number has consecutive descending numbers Ex: 87654321

# File lib/GoldNumber.rb, line 70
def consecutive_descending?
    valid = true
    @number.chars.each_with_index do |char, i|
        if valid && (i < @number.length-1)
            valid = (char.to_i-1 == @number[i+1].to_i)
        end
    end
    valid
end
identical?() click to toggle source

Checks if a number has all characters identical Ex: 77777777

# File lib/GoldNumber.rb, line 39
def identical?
    valid = true;
    @number.split("").each_with_index do |char, i|
        if valid && (i < @number.length-1)
            valid = (char == @number[i+1])
        end
    end
    valid
end
l33t?() click to toggle source

Checks if you have a 1337 number Ex: 13371337

# File lib/GoldNumber.rb, line 124
def l33t?
    return true if @number.include? "1337"
end
palindrome?() click to toggle source
Checks if a number is palindrome
Ex: 5020 0205

TODO: Second thoughts, maybe this isn't a Gold Number as it looks a bit ugly. Get the requirements straight :)

# File lib/GoldNumber.rb, line 52
def palindrome?
    @number == @number.reverse
end
palindrome_pairs?() click to toggle source

Checks if a number can be splitted into groups of 2, each group being a palindrome Only valid for even numbers of characters in a number Ex: 91112233 or 88554477

# File lib/GoldNumber.rb, line 91
def palindrome_pairs?
    return false if @number.length % 2 == 1

    groups, valid = [], true

    groups = @number.chars.each_slice(2).map(&:join)
    groups.each do |pair|
        if valid
            valid = (pair == pair.reverse)
        end
    end
    valid
end
repetitive_pairs?() click to toggle source

Checks if a number can be splitted into groups of 2, all groups being identical Only valid for even numbers of characters in a number Ex: 91919191 or 80565656

# File lib/GoldNumber.rb, line 108
def repetitive_pairs?
    return false if @number.length % 2 == 1

    groups, valid = [], true

    groups = @number.chars.each_slice(2).map(&:join)
    groups.each_with_index do |pair, i|
        if valid && (i < groups.length-1)
            valid = (pair == groups[i+1])
        end
    end
    valid
end
two_identical_groups?() click to toggle source

Checks if a number is made out of 2 identical groups of numbers Only valid for even numbers of characters in a number Ex: 12341234

# File lib/GoldNumber.rb, line 83
def two_identical_groups? # I'll run out of method name soon. I guarantee it.
    return false if @number.length % 2 == 1
    valid = (@number[0...@number.length/2] == @number[@number.length/2..-1])
end