diff options
-rw-r--r-- | base/config.py | 55 | ||||
-rw-r--r-- | base/core.py | 4 | ||||
-rw-r--r-- | base/run.py | 39 |
3 files changed, 53 insertions, 45 deletions
diff --git a/base/config.py b/base/config.py index 2092aa5..09eb0fb 100644 --- a/base/config.py +++ b/base/config.py @@ -19,24 +19,41 @@ import os PROBCONFADDR = os.getenv('PROBCONFADDR') +INPUT_DIR = os.getenv('INPUT_DIR') + +class Config: + def __init__(self, address): + self.data = [] + self.address = address + + def parse(self): + PROBCONF = open (self.address, 'r') + + self.count = int (PROBCONF.readline().strip()) + CONFMOD = PROBCONF.readline().strip() + + if CONFMOD == 'default': + confline = PROBCONF.readline().strip() + for i in range(self.count): + self.data.append (confline.replace ('%n', str(i)).split()) + else: + for i in range(self.count): + confline = PROBCONF.readline() + self.data.append (confline.replace ('%n', str(i)).split()) + + PROBCONF.close() + + def input_command(self, test): + input_command = INPUT_DIR + '/' + self.data[test][3]; + + if (self.data[test][0] == 'normal'): + input_command = 'cat ' + input_command + return input_command + + def get_limits(self, test): + return [int(self.data[test][1]), int(self.data[test][2])] def parse(): - PROBCONF = open (PROBCONFADDR, 'r') - - COUNT = int (PROBCONF.readline().strip()) - CONFMOD = PROBCONF.readline().strip() - - CONFIG = [] - - if CONFMOD == 'default': - confline = PROBCONF.readline().strip() - for i in range(COUNT): - CONFIG.append (confline.replace ('%n', str(i)).split()) - else: - for i in range(COUNT): - confline = PROBCONF.readline() - CONFIG.append (confline.replace ('%n', str(i)).split()) - - PROBCONF.close() - - return [COUNT, CONFIG] + CONFIG = Config (PROBCONFADDR) + CONFIG.parse() + return CONFIG diff --git a/base/core.py b/base/core.py index 6e42ebd..b60d9c3 100644 --- a/base/core.py +++ b/base/core.py @@ -34,7 +34,7 @@ PROBLEM = os.getenv("PROBLEM") LANGUAGE = os.getenv('LANGUAGE') # Reading problem specific options from problem config -[COUNT, CONFIG] = config.parse() +CONFIG = config.parse() # Initializing log prefix = SUBID + ':' + USER + ':' + PROBLEM + ':' + LANGUAGE + ': ' @@ -54,7 +54,7 @@ elif compret: # Unspecified Compilation error else: # Start running update.status ('RUN', SUBID, -1, -1); - arr = run.main (COUNT, CONFIG) + arr = run.main (CONFIG) charstat = 'CWTMRU' # [ correct, wrong, time, memory, runtime, unexpected ] diff --git a/base/run.py b/base/run.py index 37aec11..dd93b69 100644 --- a/base/run.py +++ b/base/run.py @@ -22,17 +22,10 @@ import update SUBID = os.getenv("SUBID") LOGGER = os.getenv("LOGGER") JAILER = os.getenv("JAILER") -INPUT_DIR = os.getenv("INPUT_DIR") def run (testnum, CONFIG): - TIMELIM = CONFIG[1] - MEMLIM = CONFIG[2] - INPUT_COMMAND = INPUT_DIR + '/' + CONFIG[3] - - if (CONFIG[0] == 'normal'): - INPUT_COMMAND = 'cat ' + INPUT_COMMAND - -# print JAILER + ' ' + str (testnum) + ' ' + str(TIMELIM) + ' ' + INPUT_COMMAND + [TIMELIM, MEMLIM] = CONFIG.get_limits(testnum) + INPUT_COMMAND = CONFIG.input_command(testnum) update.status ('RUN', SUBID, -1, testnum) @@ -54,30 +47,28 @@ def run (testnum, CONFIG): mem = int (result[2]) ret = int (result[3]) - if ret > 127: status = 6 + retstat - 128 # signal - elif ret > 124: status = 5 # unexpected - elif ret == 124: status = 2 # time - elif ret != 0: status = 4 # runtime - elif mem > MEMLIM: status = 3 # memory - elif time > TIMELIM: status = 2 # time - elif score <= 0: status = 1 # wrong - else: status = 0 # correct + if ret > 127: status = 6 + ret - 128 # signal + elif ret > 124: status = 5 # unexpected + elif ret == 124: status = 2 # time + elif ret != 0: status = 4 # runtime + elif mem > MEMLIM: status = 3 # memory + elif time > TIMELIM: status = 2 # time + elif score <= 0: status = 1 # wrong + else: status = 0 # correct os.system(LOGGER + " LOG error {0} {1} {2} {3} {4} {5} {6}".format(SUBID, status, testnum, time, mem, ret, score)) - error = update.status ('RUN', SUBID, status, testnum, time, mem, score) + error = update.status ('RUN', SUBID, status, testnum) return [status, error] -#strstat = [ 'Accepted!', 'Wrong answer', 'Time limit exceeded', 'Memory limit exceeded', 'Run time error', 'Unexpected error', 'Signal #' ] - -def main(COUNT, CONFIG): +def main(CONFIG): arr = [] - for i in range(COUNT): - [status, error] = run (i, CONFIG[i]) + for i in range(CONFIG.count): + [status, error] = run (i, CONFIG) arr.append(status) if error: - break + break; update.status ('END', SUBID, status) |