Begin forwarded message:

> 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
>
> ------------------------