#!/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"