IP address validity

Given a string that represents possible IP addresses, they are missing the ".". Evaluate and generate all possible valid IP addresses from the string.

Example

ip: '19216811'
op: '192.168.1.1', '19.216.81.1', ..

Solution

  • Insert the 3 dots at all possible locations and verify if the resulting IP address is valid

Code

# Generate all possible IP addresses from given string
def print_valid_ip_address(ip_string)
  return nil if ip_string.nil

  (1...4).each do |i|
    first = ip_string[0...i]
    return false unless valid_ip?(first)

    (i...i+3).each do |j|
      second = ip_string[i...j]
      return false unless valid_ip?(second)

      (j...j+3).each do |k|
        third = ip_string[j...k]
        fourth = ip_string[k...-1]
        return false unless valid_ip(third) && valid_ip(fourth)

        ## Validated successfully
        puts "#{first}.#{second}.#{third}.#{fourth}"
      end
    end
  end
end

# Verify a valid IP address
def valid_ip(str)
  return false if str == '00' || str == '000'
  return false if str.to_i > 255

  return true
end

Complexity

  • There are 2^32 possible IP addresses, therefore this algorithm which generates as many possible IP addresses is constant.

results matching ""

    No results matching ""