Please Forward: Ruby Quiz Submission

From: Kevin Winchester <kjwinchester@gmail.com>
Date: September 17, 2007 7:29:13 PM CDT
To: submission@rubyquiz.com
Subject: Please Forward: Ruby Quiz Submission

Hi,

Here's my first attempt at a ruby quiz. I wasn't going to bother
submitting it, until I realised that no one else did the same thing I
did.

I took the CSV file and converted it into an SQLite database and used
sqlite-ruby to perform a selection.

In the process, I noticed that there is actually one duplicate
starting IP address in the CSV file (which I simply removed as its range
was entirely within the range of the next line).

So I end up with a very short ruby program, at least, although my times
are still a little longer than some of the other submissions.

--------------------------

class IpToCountry
  require 'sqlite3'

  def initialize
    @db = SQLite3::Database.new('ip2country.db')
  end
  
  def ip2num(ipstr)
    ipsplit = ipstr.split(".")
    ipsplit[0].to_i * 256 * 256 * 256 +
                        ipsplit[1].to_i * 256 * 256 +
                        ipsplit[2].to_i * 256 +
                        ipsplit[3].to_i
        end

  def get_cc(ipstr)
    numstr = ip2num(ipstr).to_s
    @db.execute("SELECT CTRY FROM ITC WHERE (" + numstr +
                        "IPFROM) AND (" + numstr +
                        " < IPTO);")[0][0]
        end
end

if __FILE__ == $0
  i2c = IpToCountry.new()
  puts i2c.get_cc(ARGV[0])
end

------------------------

kevin@alekhine:~/ruby/rubyquiz/q139$ time ruby ip_to_country.rb 68.97.89.187
US

real 0m0.095s
user 0m0.055s
sys 0m0.005s

------------------------

ยทยทยท

Begin forwarded message: