def compile_no_main(self): # Modify the program util.copy_file(self.name + '.R', 'modified.R') ori = util.read_file('modified.R') main = util.read_file('main.R') util.write_file('modified.R', '%s\n%s\n' % (ori, main)) try: s = util.read_file("modified.R") util.write_file("wrapper.R", """ wrapper_R <- function() { %s } """ % s) util.write_file( "compiler.R", """ library("codetools") source("wrapper.R") checkUsage(wrapper_R) """ % s) self.execute_compiler('Rscript compiler.R 1> /dev/null') except CompilationTooLong: print(Style.BRIGHT + Fore.RED + 'Compilation time exceeded!' + Style.RESET_ALL) return False util.del_file("compiler.R") util.del_file("wrapper.R") util.del_file("modified.R") return True
def execute(self, tst, correct, iterations=1): if 'source_modifier' in self.handler and ( self.handler['source_modifier'] == 'no_main' or self.handler['source_modifier'] == 'structs'): util.copy_file(self.name + '.py', 'modified.py') ori = util.read_file(self.name + '.py') main = util.read_file('main.py') util.write_file('modified.py', '%s\n%s\n' % (ori, main)) exec = 'modified.py' else: exec = self.executable() if correct: ext = 'cor' print("python3 %s < %s.inp > %s.%s" % (exec, tst, tst, ext), end='') else: ext = 'py.out' """func.system("python3 %s < %s.inp > %s.%s" % (exec, tst, tst, ext))""" func = 'import os; os.system("python3 %s < %s.inp > %s.%s")' % ( exec, tst, tst, ext) time = timeit.timeit(func, number=iterations) / iterations util.del_file('modified.py') util.del_dir('__pycache__') return time
def compile_with(self, extra, tst): try: util.copy_file(self.name + ".hs", "work.hs") if util.file_exists("judge.hs"): os.system("cat judge.hs >> work.hs") f = open("work.hs", "a") print("main = do", file=f) for line in open(tst + ".inp").readlines(): line = line.rstrip() if line.startswith("let "): print(" %s" % line, file=f) else: print(" print (%s)" % line, file=f) f.close() self.execute_compiler('ghc ' + self.flags1() + ' work.hs -o work.exe 1> /dev/null') except CompilationTooLong: print(Style.BRIGHT + Fore.RED + 'Compilation time exceeded!' + Style.RESET_ALL) return False if util.file_exists('work.exe'): util.del_file("work.hi") util.del_file('work.exe') return True else: return False
def compile_normal(self): for f in glob.glob('*.class'): util.del_file(f) try: util.copy_file(self.name + '.java', 'Main.java') self.gen_wrapper() self.execute_compiler('javac ' + self.flags1() + ' wrapper.java') except CompilationTooLong: print(Style.BRIGHT + Fore.RED + 'Compilation time exceeded!' + Style.RESET_ALL) return False self.del_wrapper() return util.file_exists(self.executable())
def compile_no_main(self): # Modify the program util.copy_file(self.name + '.cc', 'modified.cc') ori = util.read_file('modified.cc') main = util.read_file('main.cc') util.write_file( 'modified.cc', """ #define main main__3 %s #undef main #define main main__2 %s #undef main int main() { return main__2(); } """ % (ori, main)) # Compile modified program util.del_file(self.executable()) try: self.execute_compiler('g++ ' + self.flags2() + ' modified.cc -o ' + self.executable()) except CompilationTooLong: print(Style.BRIGHT + Fore.RED + 'Compilation time exceeded!' + Style.RESET_ALL) util.del_file(self.executable()) util.del_file('modified.cc') return False # We are almost there util.del_file('modified.cc') if util.file_exists(self.executable()): return True else: print(Style.BRIGHT + Fore.RED + 'Unreported error.' + Style.RESET_ALL) util.del_file(self.executable()) return False
def compile_with(self, extra): try: util.copy_file(self.name + ".py", "work.py") os.system("echo '' >> work.py") os.system("echo '' >> work.py") if util.file_exists("judge.py"): os.system("cat judge.py >> work.py") os.system("cat %s >> work.py" % extra) self.gen_wrapper() self.execute_compiler('python3 py3c.py work.py 1> /dev/null') return True except CompilationTooLong: print(Style.BRIGHT + Fore.RED + 'Compilation time exceeded!' + Style.RESET_ALL) return False self.del_wrapper() return False
def compile_no_main(self): if not self.compile_normal(): return False # Modify the program util.copy_file(self.name + '.py', 'modified.py') ori = util.read_file(self.name + '.py') main = util.read_file('main.py') util.write_file('modified.py', '%s\n%s\n' % (ori, main)) # Compile modified program try: self.gen_wrapper() self.execute_compiler('python3 py3c.py modified.py 1> /dev/null') except CompilationTooLong: print(Style.BRIGHT + Fore.RED + 'Compilation time exceeded!' + Style.RESET_ALL) return False self.del_wrapper() return True
def compile(self): util.del_file("work") util.del_file("work.hi") util.del_file("work.o") util.copy_file(self.name + '.hs', "work.hs") f = open("work.hs", "a") print("""main = do print "OK" """, file=f) f.close() try: self.execute_compiler('ghc -O3 work.hs 1> /dev/null') except CompilationTooLong: print(Style.BRIGHT + Fore.RED + 'Compilation time exceeded!' + Style.RESET_ALL) return False util.del_file("work") util.del_file("work.hi") util.del_file("work.hs") util.del_file("work.o") return True
def compile(self): util.del_file(self.executable()) util.del_dir(self.name + ".dir") if not util.file_exists("solution"): raise Exception("There is no solution directory") if not util.file_exists("public"): raise Exception("There is no public directory") if not util.file_exists("private"): raise Exception("There is no private directory") try: util.mkdir(self.name + '.dir') util.system('cp solution/* public/* private/* ' + self.name + '.dir') os.chdir(self.name + '.dir') self.execute_compiler('make program.exe 1> make.log') except CompilationTooLong: print(Style.BRIGHT + Fore.RED + 'Compilation time exceeded!' + Style.RESET_ALL) os.chdir('..') return False os.chdir('..') if util.file_exists(self.name + '.dir/program.exe'): util.copy_file(self.name + '.dir/program.exe', './' + self.executable()) util.del_dir(self.name + ".dir") if util.file_exists(self.executable()): util.system("(cd public && tar cf ../public.tar *)") util.system("(cd private && tar cf ../private.tar *)") util.system("(cd solution && tar cf ../solution.tar *)") return True else: return False
def compile_no_main(self): util.copy_file(self.name + '.hs', 'modified.hs') ori = util.read_file('modified.hs') main = util.read_file('main.hs') util.write_file('modified.hs', """ %s %s """ % (ori, main)) util.del_file(self.executable()) try: self.execute_compiler('ghc ' + self.flags1() + ' modified.hs -o ' + self.executable() + ' 1> /dev/null') except CompilationTooLong: print(Style.BRIGHT + Fore.RED + 'Compilation time exceeded!' + Style.RESET_ALL) util.del_file(self.executable()) return False util.del_file('modified.hs') util.del_file('modified.hi') util.del_file('modified.o') return util.file_exists(self.executable())