lib/judge_system.rb in judge_system-1.7.2 vs lib/judge_system.rb in judge_system-1.7.3

- old
+ new

@@ -1,74 +1,57 @@ -require "judge_system/version" +require 'judge_system/version' require 'zlib_input' -require "net/http" -require "uri" -require "json" -require 'timeout' -require 'pathname' +require 'net/http' +require 'uri' +require 'json' module JudgeSystem - class WandBox + class WandBox + def self.compile(compiler: '', code: '', stdin: '') + body = { + code: code, + compiler: compiler, + stdin: stdin + }.to_json - def self.compile compiler: "", code: "", stdin: "" - body = { - code: code, - compiler: compiler, - stdin: stdin, - } - uri = URI.parse("http://melpon.org/wandbox/api/compile.json") - request = Net::HTTP::Post.new(uri.request_uri, initheader = { "Content-type" => "application/json" },) - request.body = JSON.generate body - http = Net::HTTP.new(uri.host, uri.port) - http.start do |http| - response = http.request(request) - JSON.parse(response.body) - end - end + uri = URI.parse('http://melpon.org/wandbox/api/compile.json') + request = Net::HTTP::Post.new(uri.request_uri, 'Content-type' => 'application/json') + request.body = body + http = Net::HTTP.new(uri.host, uri.port) + response = http.request(request) + JSON.parse(response.body) + end - def self.run lang, code, input, time - path = File.expand_path('../', __FILE__ ) - sys = File.open("#{path}/compile_systems/#{lang}_system.rb", "r").read - data = nil - spliter = "\n<$><*><$>\n" - stdin = BZip2Input.compress(code + spliter + input + spliter + ("%f" % time)) - begin - data = compile( compiler: "ruby-head", code: sys, stdin: stdin ) - rescue - return 'RE' - end - error = data["program_error"] - result = data["program_output"] - if error == "Killed\n" - return 'TLE' - elsif result == nil && error - return "RE" - else - return result - end - end - private_class_method :compile, :run - - public - def self.judge lang, code , answer, stdin, time - output = run lang, code, stdin, time - if output == 'TLE' - return 'TLE' - elsif output == 'RE' - return 'RE' - else - result = output == answer - if result - return 'AC' - else - return 'WA' - end - end - end - end + def self.run(lang, code, input, time) + path = File.expand_path('../', __FILE__) + sys = File.open("#{path}/compile_systems/#{lang}_system.rb", 'r').read + data = nil + spliter = "\n<$><*><$>\n" + stdin = BZip2Input.compress(code + spliter + input + spliter + format('%f', time)) + begin + data = compile(compiler: 'ruby-head', code: sys, stdin: stdin) + rescue + return 'RE' + end + error = data['program_error'] + result = data['program_output'] + return 'TLE' if error == "Killed\n" + return 'RE' if result.nil? && error + result + end - def judge_result lang: "", code: "" , answer: "", stdin: "", time: 20 - WandBox.judge lang, code, answer, stdin, time - end + private_class_method :compile, :run - module_function :judge_result + def self.judge(lang, code, answer, stdin, time) + output = run(lang, code, stdin, time) + return 'TLE' if output == 'TLE' + return 'RE' if output == 'RE' + output == answer ? 'AC' : 'WA' + end + end + + def judge_result(lang: '', code: '', answer: '', stdin: '', time: 20) + WandBox.judge(lang, code, answer, stdin, time) + end + + module_function :judge_result end