From 7e33c772eb04f30d4a750ea194ec81dd2900952f Mon Sep 17 00:00:00 2001 From: Jeroen Overschie Date: Tue, 5 Apr 2022 18:14:04 +0200 Subject: [PATCH] =?UTF-8?q?Add=20scoring=20function=20=F0=9F=93=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/score_evaluation.py | 31 +++++++++++++++++++++++++++++++ quick_start.ipynb | 3 ++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/common/score_evaluation.py b/common/score_evaluation.py index 0c57f0f..e74cf70 100644 --- a/common/score_evaluation.py +++ b/common/score_evaluation.py @@ -122,3 +122,34 @@ def drop_blocks(field: Field, blocks: List[Block], solution: Solution) -> None: for block_id, block_position in zip(solution.block_ids, solution.block_positions): drop_block(field, blocks[block_id], block_position) + +def score_row(row: np.array, rewards: Rewards) -> int: + def color_points(row: list, rewards: Rewards) -> int: + score = 0 + for color in row: + if color == "": + score -= 1 + else: + score += rewards.points[color] + return score + + def multiplication_factor_for_full_color_row(row: list, rewards: Rewards) -> int: + if row[0] != "" and len(set(row)) == 1: + return rewards.multiplication_factors[row[0]] + return 1 + + full_row = not any(row == "") + empty_row = "".join(row) == "" + score = 0 + if not empty_row: + score += color_points(row, rewards) + if full_row: + score *= multiplication_factor_for_full_color_row(row, rewards) + return score + +def score_solution(field: Field, rewards: Rewards) -> int: + score = 0 + for row in field.values: + score += score_row(row, rewards) + return score + diff --git a/quick_start.ipynb b/quick_start.ipynb index 5b33708..bd533f3 100644 --- a/quick_start.ipynb +++ b/quick_start.ipynb @@ -44,7 +44,8 @@ " parse_puzzle,\n", " write_solution,\n", " drop_block,\n", - " drop_blocks\n", + " drop_blocks,\n", + " score_solution,\n", ")" ] },