def get_phrase_submission(phrase, problem=24): phrase = phrase.lower() path = os.path.join(utils.get_data_dir(), "qualifier/problem_%d.json" % problem) with open(path) as fin: data = json.load(fin) data["problemId"] = problem g = game.Game(data, data["sourceSeeds"][0]) c = "m" if phrase[0] == "l" else "l" c *= 5 try: g.execute_string(c + phrase) except (GameEnded, KeyError): return None c = "m" if phrase[-1] == "l" else "l" try: while True: g.execute_char(c) except GameEnded as e: solution = utils.gen_output(g, e) result = { "score": e.move_score, "powerScore": e.power_score, "tag": solution["tag"], "problemId": solution["problemId"], "seed": solution["seed"], "solution": solution["solution"], } return (solution, result)
def main(): random.seed(42) args = parser.parse_args() path = os.path.join(utils.get_data_dir(), args.problem) with open(path) as fin: data = json.load(fin) m = re.match('.*/problem_(\\d+)\\.json', path) assert m data['problemId'] = int(m.group(1)) assert args.seed < len(data['sourceSeeds']), \ "There are only %d seeds" % len(data['sourceSeeds']) g = game.Game(data, data['sourceSeeds'][args.seed]) if args.moves: delay = 0.05 else: delay = 0 moves = itertools.chain(args.moves, gamepad()) try: term_attr = setup_term() if not args.no_gui: display(g) g.trace = [] if args.tracedir: trace(g) prev_states = collections.deque(maxlen=25) prev_states.append(copy.deepcopy(g)) for ch in moves: if ch == UNDO: if len(prev_states) > 1: g = prev_states[-1] prev_states.pop() else: prev_states.append(copy.deepcopy(g)) g.execute_char(ch) if args.tracedir: trace(g) if not args.no_gui: display(g) if args.delay: time.sleep(args.delay) except game.GameEnded as e: restore_term(term_attr) print('\n') print(e) solution = utils.gen_output(g, e) print('Solution: %s' % json.dumps([solution])) if args.tracedir: dump_trace(g, args.tracedir) if args.prompt_for_submit: print('\n') if read_yn('Do you want to submit this solution? [y/n] '): result = { 'score': e.move_score, 'powerScore': e.power_score, 'tag': solution['tag'], 'problemId': solution['problemId'], 'seed': solution['seed'], 'solution': solution['solution'] } from production.golden.utils import http_submit ok = http_submit(os.getenv('USER'), result, solution) if (200, 'Thanks!') == (ok.status_code, ok.text): print("Submission accepted") else: print("Submission rejected") finally: restore_term(term_attr)