From: Kevin Winchester <kjwinchester@gmail.com>
Date: September 17, 2007 7:29:13 PM CDT
To: submission@rubyquiz.com
Subject: Please Forward: Ruby Quiz SubmissionHi,
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
enddef get_cc(ipstr)
numstr = ip2num(ipstr).to_s
@db.execute("SELECT CTRY FROM ITC WHERE (" + numstr +
"IPFROM) AND (" + numstr +
" < IPTO);")[0][0]
end
endif __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
USreal 0m0.095s
user 0m0.055s
sys 0m0.005s------------------------
ยทยทยท
Begin forwarded message: