diff --git a/judge/scripts/import_problem b/judge/scripts/import_problem new file mode 100755 --- /dev/null +++ b/judge/scripts/import_problem @@ -0,0 +1,164 @@ +#!/usr/bin/ruby + +# import_problem: +# * creates a directory for a problem in the current directory, +# * copy testdata in the old format and create standard testcase config file + +require 'erb' +require 'fileutils' +require File.join(File.dirname(__FILE__),'lib/import_helper') + +def input_filename(dir,i) + "#{dir}/input-#{i}.txt" +end + +def answer_filename(dir,i) + "#{dir}/answer-#{i}.txt" +end + +def build_testrun_info_from_dir(num_testruns,importing_test_dir) + filenames = Dir["#{importing_test_dir}/*.in"].collect do |filename| + File.basename((/(.*)\.in/.match(filename))[1]) + end + build_testrun_info(num_testruns,filenames) +end + +def copy_testcase(importing_test_dir,fname,dir,i) + system("cp #{importing_test_dir}/#{fname}.in #{input_filename(dir,i)}") + system("cp #{importing_test_dir}/#{fname}.sol #{answer_filename(dir,i)}") +end + +def process_options(options) + i = 4 + while ii+1 + i += 1 + end + if ARGV[i]=='-m' + options[:mem_limit] = ARGV[i+1].to_i if ARGV.length>i+1 + i += 1 + end + i += 1 + end +end + +SCRIPT_DIR = File.dirname(__FILE__) + +# print usage +if (ARGV.length < 4) or (ARGV[3][0,1]=="-") + puts < 1, :mem_limit => 16} +process_options(options) + +testrun_info = build_testrun_info_from_dir(num_testruns, testcase_dir) + +# start working +puts "creating directories" + +system("mkdir #{problem}") +system("mkdir #{problem}/script") +system("mkdir #{problem}/test_cases") +#system("cp #{GRADER_DIR}/std-script/* #{problem}/script") + +puts "copying testcases" + +tr_num = 0 + +num_testcases = 0 + +testrun_info.each do |testrun| + tr_num += 1 + puts "testrun: #{tr_num}" + + testrun.each do |testcase_info| + testcase_num, testcase_fname = testcase_info + + puts "copy #{testcase_fname} to #{testcase_num}" + + system("mkdir #{problem}/test_cases/#{testcase_num}") + copy_testcase("#{testcase_dir}",testcase_fname,"#{problem}/test_cases/#{testcase_num}",testcase_num) + + num_testcases += 1 + end +end + +# generating all_tests.cfg +puts "generating testcase config file" + +template = File.open(SCRIPT_DIR + "/templates/all_tests.cfg.erb").read +all_test_cfg = ERB.new(template) + +cfg_file = File.open("#{problem}/test_cases/all_tests.cfg","w") +cfg_file.puts all_test_cfg.result +cfg_file.close + + +# copy check script +if res = /^wrapper:(.*)$/.match(check_script) + # wrapper script + check_script_fname = res[1] + script_name = File.basename(check_script_fname) + check_wrapper_template = File.open(SCRIPT_DIR + "/templates/check_wrapper").read + check_wrapper = ERB.new(check_wrapper_template) + + check_file = File.open("#{problem}/script/check","w") + check_file.puts check_wrapper.result + check_file.close + + File.chmod(0755,"#{problem}/script/check") + + system("cp #{check_script_fname} #{problem}/script/#{script_name}") +else + if File.exists?(SCRIPT_DIR + "/templates/check.#{check_script}") + check_script_fname = SCRIPT_DIR + "/templates/check.#{check_script}" + else + check_script_fname = check_script + end + system("cp #{check_script_fname} #{problem}/script/check") +end + +# generating test_request directory +puts "generating test_request template" +FileUtils.mkdir_p("test_request/#{problem}/script") +FileUtils.mkdir_p("test_request/#{problem}/test_cases/1") + +template = File.open(SCRIPT_DIR + "/templates/test_request_all_tests.cfg.erb").read +test_request_all_test_cfg = ERB.new(template) + +cfg_file = File.open("test_request/#{problem}/test_cases/all_tests.cfg","w") +cfg_file.puts test_request_all_test_cfg.result +cfg_file.close + +system("cp #{SCRIPT_DIR}/templates/check_empty test_request/#{problem}/script/check") +system("cp #{SCRIPT_DIR}/templates/answer-1.txt test_request/#{problem}/test_cases/1") + +puts "done"