From 6063b02b2ebecde88f4825e46505153e6ce314e2 Mon Sep 17 00:00:00 2001 From: Kento HASEGAWA Date: Tue, 13 Aug 2019 01:36:00 +0900 Subject: [PATCH] Add scripts for ADC2019 system --- .gitignore | 59 +++++++++++++++++++++++++++++++ kwmr_solver.py | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 154 insertions(+) create mode 100644 .gitignore create mode 100644 kwmr_solver.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..481db76 --- /dev/null +++ b/.gitignore @@ -0,0 +1,59 @@ +/*.txt +solver_soft/sim + +### https://raw.github.com/github/gitignore/9d7ff09c7d38dce9ef03e7ea4dc908a622546757/C.gitignore + +# Prerequisites +*.d + +# Object files +*.o +*.ko +*.obj +*.elf + +# Linker output +*.ilk +*.map +*.exp + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ +*.su +*.idb +*.pdb + +# Kernel Module Compile Results +*.mod* +*.cmd +.tmp_versions/ +modules.order +Module.symvers +Mkfile.old +dkms.conf + + diff --git a/kwmr_solver.py b/kwmr_solver.py new file mode 100644 index 0000000..f1b00dc --- /dev/null +++ b/kwmr_solver.py @@ -0,0 +1,95 @@ +import argparse +import os +import subprocess + +proc = None +stop_flag = False + +def stop(): + global proc + global stop_flag + + stop_flag = True + if not proc is None: + proc.terminate() + print('stopped') + +def solve(params): + global proc + global stop_flag + + stop_flag = False + + # 必要な変数があるか確認 + assert('problem' in params) + assert('timeout' in params) + + problem = params['problem'] + timeout = params['timeout'] + + basedir = os.path.abspath(os.path.dirname(__file__)) + + solution_filepath = f'{basedir}/a.txt' + if os.path.exists(solution_filepath): + os.remove(solution_filepath) + + cmds = f'{basedir}/solver_soft/sim -o {solution_filepath}'.split() + + proc = subprocess.Popen( + cmds, + stdin=subprocess.PIPE, + # stderr=subprocess.PIPE, + # stdout=subprocess.PIPE + ) + + try: + # outs, errs = proc.communicate() + proc.communicate(problem.encode()) + status = 'done' + except Exception as ex: + status = 'failed' + finally: + returncode = proc.returncode + # outs = outs.decode() + # errs = errs.decode() + # print(outs) + # print(errs) + + solution = '' + if returncode == 0: # 10 when SAT + status = 'done' + if os.path.exists(solution_filepath): + with open(solution_filepath, 'r') as fp: + solution = fp.read() + else: + status = 'failed' + else: + status = 'failed' + + return { + 'status': status, + 'solution': solution + } + +def main(args): + + with open(args['problem'], 'r') as fp: + problem = fp.read() + + params = { + 'problem': problem, + 'timeout': args['timeout'] + } + + ret = solve(params) + + print(ret) + +if __name__ == "__main__": + + parser = argparse.ArgumentParser(description='Wrapper Script for ADC2019 Solver') + parser.add_argument('problem', type=str, help='File path to the problem file') + parser.add_argument('-t', '--timeout', type=int, default=10, help='Timeout for the process of the solver') + args = vars(parser.parse_args()) + + main(args) -- 2.22.0