expand cli command solve

This commit is contained in:
Maximilian Keßler 2024-10-11 21:38:29 +02:00
parent a1a5cfac20
commit 11807628fa
2 changed files with 16 additions and 10 deletions

View file

@ -98,8 +98,8 @@ def subcommand_download(
logger.info("Successfully exported games for all variants") logger.info("Successfully exported games for all variants")
def subcommand_solve(var_id, timeout: int): def subcommand_solve(var_id: int, seed_class: int, num_players: Optional[int], timeout: int, ):
instance_finder.solve_unknown_seeds(var_id, timeout) instance_finder.solve_unknown_seeds(var_id, seed_class, num_players, timeout)
def subcommand_gen_config(): def subcommand_gen_config():
@ -165,6 +165,8 @@ def add_solve_subparser(subparsers):
parser = subparsers.add_parser('solve', help='Seed solving') parser = subparsers.add_parser('solve', help='Seed solving')
parser.add_argument('var_id', type=int, help='Variant id to solve instances from.', default=0) parser.add_argument('var_id', type=int, help='Variant id to solve instances from.', default=0)
parser.add_argument('--timeout', '-t', type=int, help='Timeout [s] for individual seeds.', default=150) parser.add_argument('--timeout', '-t', type=int, help='Timeout [s] for individual seeds.', default=150)
parser.add_argument('--class', '-c', type=int, dest='seed_class', help='Class of seed to analyze. 0 stands for hanab.live seeds', default=0)
parser.add_argument('--num_players', '-p', type=int, help='Restrict to number of players. If not specified, all player counts are analyzed.', default = None)
def add_decompress_subparser(subparsers): def add_decompress_subparser(subparsers):
parser = subparsers.add_parser('decompress', help='Decompress a hanab.live JSON-encoded replay link') parser = subparsers.add_parser('decompress', help='Decompress a hanab.live JSON-encoded replay link')

View file

@ -188,15 +188,19 @@ def solve_seed(seed, num_players, deck, var_name: str, timeout: Optional[int] =
traceback.print_exc() traceback.print_exc()
def solve_unknown_seeds(variant_id, timeout: Optional[int] = 150): def solve_unknown_seeds(variant_id, seed_class: int = 0, num_players: Optional[int] = None, timeout: Optional[int] = 150):
variant_name = variants.variant_name(variant_id) variant_name = variants.variant_name(variant_id)
database.cur.execute( query = "SELECT seeds.seed, num_players, array_agg(suit_index order by deck_index asc), array_agg(rank order by deck_index asc) "\
"SELECT seeds.seed, num_players, array_agg(suit_index order by deck_index asc), array_agg(rank order by deck_index asc) " "FROM seeds "\
"FROM seeds " "INNER JOIN decks ON seeds.seed = decks.seed "\
"INNER JOIN decks ON seeds.seed = decks.seed " "WHERE variant_id = (%s) "\
"WHERE variant_id = (%s) AND num_players = 2 AND class = 1 AND feasible is null " "AND class = (%s) "\
"GROUP BY seeds.seed order by num", "AND feasible IS NULL "
(variant_id,) if num_players is not None:
query += "AND num_players = {} ".format(num_players)
query += "GROUP BY seeds.seed ORDER BY num"
database.cur.execute(query,
(variant_id, seed_class)
) )
res = database.cur.fetchall() res = database.cur.fetchall()
data = [] data = []