Commit 6063b02b authored by Kento HASEGAWA's avatar Kento HASEGAWA
Browse files

Add scripts for ADC2019 system

parent 9a309441
Loading
Loading
Loading
Loading

.gitignore

0 → 100644
+59 −0
Changes for .gitignore: 59 added lines, 0 removed lines.
Original line number Diff line number Diff line
/*.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

kwmr_solver.py

0 → 100644
+95 −0
Changes for kwmr_solver.py: 95 added lines, 0 removed lines.
Original line number Diff line number Diff line
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)