Ordina puzzle in Ruby
08 Dec 2007 19:14 - (0) comments
Ordina is running a campaign to attract Java developers.
Here is my version of the puzzle in Ruby. For a better comparison I've kept some of the Java style code and refrained from some one liners. Still, it's about half as long as the Java version.
My solution to the puzzle uses wikipedia to lookup the acronyms.
ordina.rb
require 'open-uri'
module Nl
module Ordina
class JavaSpecialistdef self.main
js = find_specialist_wanna_be
if js
js.start
else
puts "Geen JavaSpecialist implementatie gevonden"
end
enddef start
report = "Volgens de specialist #{name}\x5c\x6eHebben de volgende termen de betekenis" +
"\x5c\x6e\x55\x4d\x4c #{eval "waarStaat\x55\x4d\x4cVoor" } \x5c\x6e\x52\x55\x50 " +
"#{eval "waarStaat\x52\x55\x50Voor" } \x5c\x6e\x58\x4d\x4c #{eval "waarStaat\x58\x4d\x4cVoor" } " +
"\x5c\x6e\x4d\x56\x43 #{eval "waarStaat\x4d\x56\x43Voor" } \x5c\x6e\x45\x4a\x42 " +
"#{eval "waarStaat\x45\x4a\x42Voor" }\x5c\x6e\x41\x4f\x50 #{eval "waarStaat\x41\x4f\x50Voor" } " +
"\x5c\x6e\x4a\x53\x46 #{eval "waarStaat\x4a\x53\x46Voor" }"
puts report.gsub!('\n', "\n")
puts kijk_bij_ordina
endprivate
def self.find_specialist_wanna_be
dir = Nl::Ordina.name.gsub('::', '/').downcase
Dir.new(dir).each{|i| require("#{dir}/#{i}") unless File.directory?("#{dir}/#{i}") }
Nl::Ordina.constants.each do |i|
unless i == self.name.split('::').last
obj = instance_eval(i).new
return obj if obj.is_a? JavaSpecialist
end
end
enddef kijk_bij_ordina
open("http://jobportal.ordina.nl/jobportal-front/pages/index.jsf").read
rescue
'Kijk op http://jobportal.ordina.nl/'
end
end
end
end
Nl::Ordina::JavaSpecialist.main
nl/ordina/impl.rb
module Nl
module Ordina
class JavaSpecialistImpl < JavaSpecialist
def name
"p8"
enddef method_missing(*args)
afk = args.first.to_s.gsub('waarStaat', '').gsub('Voor', '')
page = open("http://en.wikipedia.org/wiki/#{afk}").read
matchdata = /<title>([^>]*)(<\/title>)/.match(page)
matchdata ? matchdata[1].gsub('- Wikipedia, the free encyclopedia', '') : 'Onbekend'
end
end
end
end
Comments
No comments allowed.