summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--base/config.py55
-rw-r--r--base/core.py4
-rw-r--r--base/run.py39
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)