|
1 | 1 | import re |
2 | | -from collections import Counter |
3 | 2 | from typing import List |
4 | 3 |
|
5 | 4 |
|
@@ -59,28 +58,31 @@ def get_majority_result( |
59 | 58 | result_extractor=lambda x: x, |
60 | 59 | result_validator=lambda x: True, |
61 | 60 | ): |
62 | | - valid_answers_and_results = [(result, result_extractor(result)) |
63 | | - for result in results |
64 | | - if result_validator(result) is True |
65 | | - and result_extractor(result) is not None] |
66 | | - if len(valid_answers_and_results) == 0: |
| 61 | + extract_answers = [result_extractor(result) for result in results] |
| 62 | + valid_answers = [ |
| 63 | + result for result in extract_answers |
| 64 | + if result is not None and result_validator(result) is True |
| 65 | + ] |
| 66 | + if len(valid_answers) == 0: |
67 | 67 | return None, None |
68 | 68 |
|
69 | | - majority_result = Counter(valid_answers_and_results).most_common(1)[0][0] |
70 | | - # return result and extracted result |
71 | | - return majority_result[0], majority_result[1] |
| 69 | + answer_counts = {} |
| 70 | + for answer in valid_answers: |
| 71 | + answer_counts[answer] = answer_counts.get(answer, 0) + 1 |
| 72 | + majority_answer = max(answer_counts, key=answer_counts.get) |
| 73 | + majority_index = next( |
| 74 | + filter(lambda x: x[1] == majority_answer, |
| 75 | + enumerate(extract_answers)))[0] |
| 76 | + return majority_index, majority_answer |
72 | 77 |
|
73 | 78 |
|
74 | 79 | def get_digit_majority_vote_result(results: List[str]) -> str: |
75 | 80 |
|
76 | 81 | def is_digit(result: str): |
77 | | - extracted_answer = extract_answer_from_boxed(result) |
78 | | - if extracted_answer is None: |
79 | | - return False |
80 | | - return extracted_answer.isdigit() |
| 82 | + return result.isdigit() |
81 | 83 |
|
82 | | - vote_result = get_majority_result( |
| 84 | + index, extract_answer = get_majority_result( |
83 | 85 | results, |
84 | 86 | result_extractor=extract_answer_from_boxed, |
85 | | - result_validator=is_digit)[0] |
86 | | - return vote_result if vote_result else results[0] |
| 87 | + result_validator=is_digit) |
| 88 | + return (index, extract_answer) if extract_answer else (0, None) |
0 commit comments