From 939d7ea7f6267ce3e5f4d6ba7988af7c1f3fb86c Mon Sep 17 00:00:00 2001 From: emkael Date: Fri, 15 Feb 2019 20:56:48 +0300 Subject: KMP support in API --- http/api.php | 40 +++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) (limited to 'http') diff --git a/http/api.php b/http/api.php index 29c56ec..3ab7f3d 100644 --- a/http/api.php +++ b/http/api.php @@ -90,7 +90,7 @@ function check_parameters($parameters) { if (!isset($parameters['manual']) || !isset($parameters['manual']['min_points']) || !isset($parameters['manual']['tournament_weight'])) { ensure_parameters($parameters, array('tournament_rank', 'over39_boards')); check_values($parameters, array( - 'tournament_rank' => function($r) { return ctype_digit($r) && intval($r) >= 0 && intval($r) <= 7; }, + 'tournament_rank' => function($r) { return ctype_digit($r) && ((intval($r) >= 0 && intval($r) <= 7) || intval($r) == RANK_KMP); }, 'over39_boards' => function($r) { return ctype_digit($r) && intval($r) >= 0 && intval($r) <= 1; } )); } else { @@ -106,23 +106,28 @@ function check_parameters($parameters) { } } +const RANK_KMP = 101; + function parse_parameters($parameters) { $return = array(); $return['type'] = intval($parameters['type']); if ($return['type'] == 3 || $return['type'] > 4) { throw new ParametersException('Parameter: type has incorrect value (' . $return['type'] . ')'); } + if ($return['type'] != 2 && $parameters['tournament_rank'] == RANK_KMP) { + throw new ParametersException('Parameter: type has incorrect value (' . $return['type'] . ') for KMP tournament'); + } $return['contestants'] = intval($parameters['contestants']); $return['players'] = isset($parameters['players']) ? intval($parameters['players']) : intval($parameters['contestants']) * $return['type']; $return['title_sum'] = floatval($parameters['title_sum']); $weights = array( - array(1, 2, 4, 5, 7, 10, 15, 25), - array(2, 3, 5, 7, 10, 15, 25, 40) + array(1, 2, 4, 5, 7, 10, 15, 25, RANK_KMP => 0), + array(2, 3, 5, 7, 10, 15, 25, 40, RANK_KMP => 0) ); $return['tournament_weight'] = (isset($parameters['manual']) && isset($parameters['manual']['tournament_weight'])) ? intval($parameters['manual']['tournament_weight']) : $weights[intval($parameters['over39_boards'])][intval($parameters['tournament_rank'])]; $min_points = array( - array(0, 0, 0, 0, 50, 75, 150, 200), - array(0, 0, 0, 0, 70, 100, 200, 300) + array(0, 0, 0, 0, 50, 75, 150, 200, RANK_KMP => 0), + array(0, 0, 0, 0, 70, 100, 200, 300, RANK_KMP => 0) ); $return['min_points'] = (isset($parameters['manual']) && isset($parameters['manual']['min_points'])) ? intval($parameters['manual']['min_points']) : $min_points[intval($parameters['over39_boards'])][intval($parameters['tournament_rank'])]; $return['players_coefficient'] = (isset($parameters['manual']) && isset($parameters['manual']['players_coefficient'])) ? floatval($parameters['manual']['players_coefficient']) : 0.05; @@ -196,11 +201,32 @@ function calculate_points($parameters) { return $result; } +function calculate_kmp_points($parameters) { + $max_points = safe_ceil($parameters['contestants'] * 0.5); + $min_points = 1; + $result = array("sum" => 0, "points" => array(1 => $max_points)); + for ($place = 2; $place <= $parameters['contestants']; $place++) { + $result['points'][$place] = max($min_points, $result['points'][$place-1]-1); + $result['sum'] += $parameters['type'] * $result['points'][$place]; + } + if ($parameters['title_sum'] / $parameters['players'] >= 2.5) { + $result['points'][1] += 5; + $result['points'][2] += 3; + $result['points'][3] += 1; + $result['sum'] += $parameters['type'] * 8; + } + return $result; +} + function run($parameters) { try { check_parameters($parameters); - $parameters = parse_parameters($parameters); - $result = calculate_points($parameters); + $params = parse_parameters($parameters); + if ($parameters['tournament_rank'] == RANK_KMP) { + $result = calculate_kmp_points($params); + } else { + $result = calculate_points($params); + } return $result; } catch (ParametersException $e) { -- cgit v1.2.3 From 1e7ead44dfe6c09ec8f3367e85c1849156e0ff90 Mon Sep 17 00:00:00 2001 From: emkael Date: Fri, 15 Feb 2019 21:24:43 +0300 Subject: KMP support in calculator form --- http/pkle2018-test.php | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'http') diff --git a/http/pkle2018-test.php b/http/pkle2018-test.php index c236c0d..ca8882a 100644 --- a/http/pkle2018-test.php +++ b/http/pkle2018-test.php @@ -90,6 +90,7 @@ function sendit(form) { over39_boards: parseInt(form.rozdan.value) } var tourtypes = ['tk', 'to', 'tp', 'ok', 'ok1', 'ot', 'gp', 'gg']; + tourtypes[101] = 'kmp'; params['manual[players_coefficient]'] = parseFloat(form.zaw.value); params['manual[min_points]'] = parseInt(form['min' + (8-params.tournament_rank) + (params.over39_boards ? '_' : '')].value); params['manual[tournament_weight]'] = parseInt(form['r' + tourtypes[params.tournament_rank] + (params.over39_boards ? '_' : '')].value); @@ -188,7 +189,9 @@ function submitit(ev){ OTP:
Regionalny:
Okręgowy:
- Klubowy: + Klubowy: + +

@@ -197,7 +200,8 @@ function submitit(ev){


- + + OTP∗∗∗∗:
OTP∗∗∗:
@@ -206,7 +210,9 @@ function submitit(ev){ OTP:
Regionalny:
Okręgowy:
- Klubowy: + Klubowy: + +

@@ -215,7 +221,8 @@ function submitit(ev){


- + + PKL za 1 m = śr.WK×WAGA + il.zaw×WSP @@ -246,7 +253,8 @@ function submitit(ev){


- +
+ UCZESTNIKÓW

W zależności od typu
ilość indywidualistów,
par lub teamów
-- cgit v1.2.3 From d25462acf09cbd7f91d4689ef67063b3f4b69a62 Mon Sep 17 00:00:00 2001 From: emkael Date: Fri, 15 Feb 2019 22:51:05 +0300 Subject: Moving KMP radio button to the top --- http/pkle2018-test.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'http') diff --git a/http/pkle2018-test.php b/http/pkle2018-test.php index ca8882a..446a94c 100644 --- a/http/pkle2018-test.php +++ b/http/pkle2018-test.php @@ -246,6 +246,7 @@ function submitit(ev){ RANGA ZAWODÓW
+



@@ -253,8 +254,8 @@ function submitit(ev){


-
- + + UCZESTNIKÓW

W zależności od typu
ilość indywidualistów,
par lub teamów
-- cgit v1.2.3