Skip to content

Commit

Permalink
Result percentage changed to a fraction (#332)
Browse files Browse the repository at this point in the history
* Result percentage changed to a fraction

* Changed how max_score is calculated

* Bump sioworkers version

* Fix bug in calculating the percentage

---------

Co-authored-by: Zonkil <stasio.struzik@gmail.com>
  • Loading branch information
MasloMaslane and SZonkil committed Apr 24, 2024
1 parent 1ff67fd commit 9c60b54
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 9 deletions.
8 changes: 4 additions & 4 deletions oioioi/programs/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -1013,19 +1013,19 @@ class TestScorers(TestCase):
t_results_ok_perc = (
(
{'exec_time_limit': 100, 'max_score': 100},
{'result_code': 'OK', 'time_used': 0, 'result_percentage': 99},
{'result_code': 'OK', 'time_used': 0, 'result_percentage': (99, 1)},
),
(
{'exec_time_limit': 100, 'max_score': 100},
{'result_code': 'OK', 'time_used': 75, 'result_percentage': 50},
{'result_code': 'OK', 'time_used': 75, 'result_percentage': (50, 1)},
),
(
{'exec_time_limit': 100, 'max_score': 100},
{'result_code': 'OK', 'time_used': 75, 'result_percentage': 0},
{'result_code': 'OK', 'time_used': 75, 'result_percentage': (0, 1)},
),
(
{'exec_time_limit': 100, 'max_score': 100},
{'result_code': 'OK', 'time_used': 99, 'result_percentage': 1},
{'result_code': 'OK', 'time_used': 99, 'result_percentage': (1, 1)},
),
)

Expand Down
9 changes: 5 additions & 4 deletions oioioi/programs/utils.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import os.path
from fractions import Fraction
from math import ceil
from operator import itemgetter # pylint: disable=E0611

Expand Down Expand Up @@ -98,8 +99,8 @@ def min_group_scorer(test_results):

def discrete_test_scorer(test, result):
status = result['result_code']
percentage = result.get('result_percentage', 100)
max_score = int(ceil(percentage * test['max_score'] / 100.))
percentage = result.get('result_percentage', (100, 1))
max_score = ceil(Fraction(*percentage) / 100. * test['max_score'])
score = max_score if status == 'OK' else 0
return IntegerScore(score), IntegerScore(test['max_score']), status

Expand All @@ -109,8 +110,8 @@ def threshold_linear_test_scorer(test, result):
limit = test.get('exec_time_limit', 0)
used = result.get('time_used', 0)
status = result['result_code']
percentage = result.get('result_percentage', 100)
max_score = int(ceil(percentage * test['max_score'] / 100.0))
percentage = result.get('result_percentage', (100, 1))
max_score = ceil(Fraction(*percentage) / 100. * test['max_score'])
test_max_score = IntegerScore(test['max_score'])

if status != 'OK':
Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# These dependencies need to be installed from external sources,
# therefore they must be listed here. Moreover, they cannot be listed in
# setup.py, as pip is not able to install them.
http://github.com/sio2project/sioworkers/archive/refs/tags/v1.4.3.tar.gz
http://github.com/sio2project/sioworkers/archive/refs/tags/v1.4.4.tar.gz

-e .

0 comments on commit 9c60b54

Please sign in to comment.