diff --git a/js/calculator.js b/js/calculator.js
index 4e62eb6..22735ea 100644
--- a/js/calculator.js
+++ b/js/calculator.js
@@ -6,148 +6,64 @@
* @return integer;
*/
function roundup(value){
- var retval = Math.round( value / 100) * 100;
- if (retval <= 0) { // если игр МНОГО, а в фонде нет денег
+ if (value <= 0) {
return 0;
}
+ var retval = Math.round( value / 100) * 100;
return retval;
}
-/**
- * Функция расчёта приза.
- *
- * @param {float} value
- *
- * @return float
- */
-function prizefn(value) {
- return 1.0 * value * value - 2.0 * value + 1.0;
-}
-
/**
* Вычисление призов для номинации.
*
- * @param {integer} maxPrize максимальный приз номинации
- * @param {integer} minPrize минимальный приз номинации
- * @param {integer} count количество игр в номинации
- * @param {integer} prizeCount количество призовых мест
+ * @param {integer} prizes количество призов в номинации
* @param {integer} fund призовой фонд номинации
* @param {string} table ID таблицы для вывода
*
* @return void
*/
-function recalNom(maxPrize, minPrize, count, prizeCount, fund, table) {
+function recalNom(prizes, fund, table) {
jQuery(table).empty();
- if (prizeCount === 1) {
- jQuery(table).append("
"+1+" | "+fund+" руб. |
");
- return;
+ var prizeTable = {}; // таблица призов в %
+ if (prizes === 3) {
+ prizeTable = {
+ 1: 40,
+ 2: 35,
+ 3: 25
+ };
+ } else if (prizes == 2) {
+ prizeTable = {
+ 1: 60,
+ 2: 40
+ };
}
- for (var i = 1; i <= prizeCount; i++) {
- if (fund === 0) { // а тут копилка и кончилась
- break;
- }
- var prize = roundup(maxPrize * prizefn(i/count) + minPrize);
- if (prize <= fund) {
- fund = fund - prize;
- } else {
- prize = fund;
- fund = 0;
- }
+ for (var i = 1; i <= prizes; i++) {
+ var prize = roundup(fund * (prizeTable[i] / 100));
jQuery(table).append(""+i+" | "+prize+" руб. |
");
}
}
-/**
- * Вычисление максимального приза в номинации.
- *
- * @param {integer} fund фонд конкурса
- * @param {integer} minPrize текущий минимальный приз
- * @param {integer} count текущее количество призовых мест
- * @param {integer} a коэффициент приза
- *
- * @return object максимальный приз, количество призовых, минимальный приз
- */
-function calcMaxPrize(fund, minPrize, count, a) {
- if (count === 1) {
- return {
- prize: fund,
- count: count,
- minPrize: minPrize
- };
- }
- if (minPrize === 0) {
- return {
- prize: 0,
- count: count,
- minPrize: minPrize
- };
- }
- if (fund >= a * (minPrize * count)) {
- return {
- prize: roundup(a * (fund - (minPrize * count)) / count),
- count: count,
- minPrize: minPrize
- };
- } else { // много игр и мало денег
- if (count > 1) {
- return calcMaxPrize(fund, minPrize, count - 1, a);
- } else { // да за что ж вы так с авторами
- if (a > 1) {
- return calcMaxPrize(fund, minPrize, count - 1, a - 1);
- } else {
- return calcMaxPrize(fund, minPrize - 100, count, a);
- }
- }
- }
-}
-// Параметры: общий фонд, размеры номинаций
-function recalculate(fund, games, translations) {
+/**
+ * Обновление калькулятора.
+ * Вызывается при загрузке страницы или смене параметра.
+ *
+ * @param {integer} fund размер общего призового фонда
+ */
+function recalculate(fund) {
// фонды номинаций
var gameFund = roundup( fund * 0.74 );
var translateFund = roundup( fund * 0.25 );
- if (translations === undefined) {
- return;
- }
- // если переводов нет, то фонд уходит играм
- if (translations === 0) {
- gameFund = roundup(fund * 0.99);
- translateFund = 0;
- }
- // если игр нет, то фонд уходит переводам
- // (но UI калькулятора этого не позволит)
- if (games === 0) {
- gameFund = 0;
- translateFund = roundup(fund * 0.99);
- }
- // кол-во призовых мест
- var prizeGames = Math.ceil(games * 0.2);
- var prizeTranslations = Math.ceil(translations * 0.3);
- if (prizeTranslations > translations) {
- prizeTranslations = translations;
- }
- if (prizeGames > games) {
- prizeGames = games;
- }
- // минимальный приз
- var minPrize = 1000;
- var a = 3;
- var maxPrizeGames = calcMaxPrize(gameFund, minPrize, prizeGames, a);
- var maxPrizeTranslations = calcMaxPrize(translateFund, minPrize, prizeTranslations, a);
+ var prizeGames = 3; // 3 призовых места в основной номинации
+ var prizeTranslations = 2; // 2 призовых места в переводах
recalNom(
- maxPrizeGames.prize,
- maxPrizeGames.minPrize,
- games,
- maxPrizeGames.count,
+ prizeGames,
gameFund,
"#gameTable"
);
recalNom(
- maxPrizeTranslations.prize,
- maxPrizeTranslations.minPrize,
- translations,
- maxPrizeTranslations.count,
+ prizeTranslations,
translateFund,
"#translateTable"
);
@@ -161,53 +77,11 @@ jQuery(document).ready(function($){
step: 1000,
slide: function( event, ui) {
jQuery("#fundValue").text(ui.value + " руб.");
- recalculate(
- ui.value,
- $("#gameRange").slider("value"),
- $("#translateRange").slider("value")
- );
- }
- });
- jQuery("#gameRange").slider({
- range: "min",
- value: 30,
- min: 1,
- max: 100,
- slide: function( event, ui) {
- jQuery("#gameValue").text(ui.value + " игр");
- recalculate(
- $("#fundRange").slider("value"),
- ui.value,
- $("#translateRange").slider("value")
- );
- }
- });
- jQuery("#translateRange").slider({
- range: "min",
- value: 5,
- min: 0,
- max: 50,
- slide: function( event, ui) {
- jQuery("#translateValue").text(ui.value + " игр");
- recalculate(
- $("#fundRange").slider("value"),
- $("#gameRange").slider("value"),
- ui.value
- );
+ recalculate(ui.value);
}
});
jQuery("#fundValue").text(
$("#fundRange").slider("value") + " руб."
);
- jQuery("#gameValue").text(
- $("#gameRange").slider("value") + " игр"
- );
- jQuery("#translateValue").text(
- $("#translateRange").slider("value") + " игр"
- );
- recalculate(
- $("#fundRange").slider("value"),
- $("#gameRange").slider("value"),
- $("#translateRange").slider("value")
- );
+ recalculate($("#fundRange").slider("value"));
});
diff --git a/page-calculator.php b/page-calculator.php
index 8ffa5e9..6210be5 100644
--- a/page-calculator.php
+++ b/page-calculator.php
@@ -42,20 +42,6 @@ $container = get_theme_mod( 'understrap_container_type' );
-
-
Основная номинация