-
Notifications
You must be signed in to change notification settings - Fork 3
/
solve_all_e50_subproblems.py
31 lines (29 loc) · 1.36 KB
/
solve_all_e50_subproblems.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import os
import re
import subprocess
import reversi_solver_misc
# このスクリプトは、2587個すべてのsubproblemsを解いた方法を模式的に示すためだけのものです。
# このスクリプトを最後まで走らせれば実際に解くことができますが、非常に時間がかかります。
# このスクリプトを参考にして、手元のクラスタなどで並列化するコードを書いて解くのがよいでしょう。
if __name__ == "__main__":
n_tasks = max(1, os.cpu_count())
tasklist = reversi_solver_misc.read_empty50_tasklist_edax_knowledge()
assert len(tasklist) == 2587
while True:
solved_flag = True
subprocess.run(["python", "all_p006.py"])
for x in tasklist:
assert re.fullmatch(r"[-OX]{64}\s[OX];", x)
if os.path.isfile(f"{x[:64]}.csv"):
with open(f"{x[:64]}.csv", "r") as f:
lines = [
s.strip()
for s in f.readlines()
if re.search(r"[-OX]{64}\s[OX];", s.strip()) is not None
]
if len(lines) > 0:
solved_flag = False
subprocess.run(["python", "solve_one_e50_subproblem.py", x[:64], n_tasks])
if solved_flag:
break
exit(0)