Ok, here's the result of mine:

mark@server1:~/rubyquiz/139$ time ./ip2country.rb 195.135.211.255
UK

real    0m0.004s
user    0m0.004s
sys     0m0.000s


Here's my code:

#!/usr/bin/ruby
ARGV.each { |ip|
  f = ip.split(/\./).join "/"
  puts File.open(f).readlines[0] rescue puts "Unknown"
}

I think it's pretty obvious what the preparation step was. Of course,
the tradeoff for this speed is a MASSIVE waste of disk resources, but
that was unlimited in this contest, was it not? :-)

- Mark.