Sha256: 43224a6948c2d077dcefdd2a1d9bd4c3586f62b7f61ccac5a124180790d29e24

Contents?: true

Size: 1.63 KB

Versions: 1

Compression:

Stored size: 1.63 KB

Contents

require 'judge_system/version'
require 'zlib_input'
require 'net/http'
require 'uri'
require 'json'

module JudgeSystem
  class WandBox
    def self.compile(compiler: '', code: '', stdin: '')
      body = {
        code: code,
        compiler: compiler,
        stdin: stdin
      }.to_json

      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(__dir__)
      sys = File.open("#{path}/compile_systems/#{lang}_system.rb", 'r').read
      spliter = "\n<$><*><$>\n"
      stdin = BZip2Input.compress(code + spliter + input + spliter + format('%<time>f', time: time))

      begin
        data = compile(compiler: 'ruby-head', code: sys, stdin: stdin)
      rescue StandardError
        return 'RE'
      end

      error = data['program_error']
      result = data['program_output']

      if error == "Killed\n"
        result = 'TLE'
      elsif result.nil? && error
        result = 'RE'
      end
      result
    end

    private_class_method :compile, :run

    def self.judge(lang, code, answer, stdin, time)
      output = run(lang, code, stdin, time)
      if %w[TLE RE].include?(output)
        output
      else
        output == answer ? 'AC' : 'WA'
      end
    end
  end

  module_function

  def judge_result(lang: '', code: '', answer: '', stdin: '', time: 20)
    WandBox.judge(lang, code, answer, stdin, time)
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
judge_system-1.7.4 lib/judge_system.rb