From c98e9f3c7ecdd0d2b943a8e36bfa9467bb2e1acd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20Ke=C3=9Fler?= Date: Sat, 11 Nov 2023 04:20:41 +0100 Subject: [PATCH] add endgame parsing --- endgames.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/endgames.py b/endgames.py index 614611f..54b790b 100644 --- a/endgames.py +++ b/endgames.py @@ -23,27 +23,33 @@ def analyze_game(game_id: int): return probabilities output = result.stdout.decode('utf-8') m = re.search('Probability with optimal play: .*/.* ~ ([0-9.]+)', output) - if not m: - raise ValueError("Invalid program output: {}".format(output)) - probabilities[str(deck_size)] = m.group(1) + if m: + probabilities[str(deck_size)] = m.group(1) return probabilities + def full_analyze_game(game_id: int): probabilities = {} try: - result = subprocess.run(['./endgame-analyzer', '-g', str(game_id), '-d', str(deck_size), '-i', '0', '--all-clues', '-r'], stdout=subprocess.PIPE, timeout=180) - except subproces.TimeoutExpired: + result = subprocess.run(['./endgame-analyzer', '-g', str(game_id), '-d', str(10), '-i', '0', '--all-clues', '-r', '--quiet'], stdout=subprocess.PIPE, timeout=180) + except subprocess.TimeoutExpired: return probabilities output = result.stdout.decode('utf-8') - for m in re.finditer('Probability with (\d+) cards left in deck and (\d) clues (+|-\d): .*/.* ~ ([0-9.]+)', output): - probabilities[m.group(1)][m.group(3)] = m.group(4) + print(output) + for m in re.finditer('Probability with ([0-9]+) cards left in deck and [0-8] clues \((.[0-8])\).*: .*/.* ~ ([0-9.]*)', output): + if m.group(1) not in probabilities.keys(): + probabilities[m.group(1)] = {} + probabilities[m.group(1)][m.group(2)] = m.group(3) return probabilities + def full_analyze_game_cached(game_id: int): cached = DATA.get('all', {}).get(str(game_id), None) if cached is not None: return cached result = full_analyze_game(game_id) + if 'all' not in DATA.keys(): + DATA['all'] = {} DATA['all'][game_id] = result save_cache() return result