import datetime import os import time import uuid class Problem(object): def __init__(self, path): self.path = path self.name = '' self.size = (0, 0) self.block_num = 0 self.status = 'Ready' self.solutions = dict() self._load_problem(path) @property def size_str(self): return f'{self.size[0]}X{self.size[1]}' def _load_problem(self, path): with open(path, 'r') as fp: q_lines = fp.readlines() board_size = [0, 0] block_num = 0 for _l in q_lines: if "SIZE" in _l: board_size_str = _l.strip().split()[1] board_size = [int(v) for v in board_size_str.split('X')] if 'BLOCK_NUM' in _l: block_num = int(_l.strip().split()[1]) name = os.path.splitext(os.path.basename(path))[0] self.size = board_size self.block_num = block_num self.name = name self.status = 'Ready' def get_dict(self): return { 'name': self.name, 'size': self.size, 'size_str': self.size_str, 'block_num': self.block_num, 'status': self.status } def put_solution(self, data): solution = Solution(data) solution_id = solution.get_id() print(f'I: Put a solution: {solution_id}') self.solutions[solution_id] = solution def get_solutions(self): return self.solutions class Solution(object): def __init__(self, data): self.problem = data['problem'] self.request_id = data['request_id'] self.worker = data['worker'] self.elapsed_time = data['elapsed_time'] self.solution = data['solution'] self.timestamp = time.time() self._id = str(uuid.uuid4()) def get_id(self): return self._id @property def timestamp_str(self): dt = datetime.datetime.fromtimestamp( self.timestamp, datetime.timezone(datetime.timedelta(hours=9))) return dt.strftime('%H:%M:%S.%f')