Как исправить формулу расчета очков за прогноз?

233
24 апреля 2018, 02:54

Имеется форма для ввода данных:

Прогноз - вводятся 2 цифры - предполагаемый счет матча (другими словами количество голов забитые командами).

Результат - вводятся 2 цифры - конечный результат матча.

function ballResult() { 
  var prog1 = document.getElementById('prog1').value, 
    /* прогноз голов забитых командой 1*/ 
    prog2 = document.getElementById('prog2').value, 
    /* прогноз голов забитых командой 2*/ 
    res1 = document.getElementById('res1').value, 
    /* результат - забитые командой 1*/ 
    res2 = document.getElementById('res2').value, 
    /* результат - забитые командой 2*/ 
    ball = 9 - Math.abs(prog1 - res1) - Math.abs(prog2 - res2); /* формула начисления очков */ 
  document.getElementById('result').innerHTML = ball; /* вывод начисленнх очков */ 
}
#prog1, 
#prog2, 
#res1, 
#res2 { 
  width: 36px; 
  height: 36px; 
  text-align: center 
}
<div> 
  <table> 
    <tr> 
      <td> <b>Прогноз  </b> Питтсбург</td> 
      <td> 
        <div> 
          <input type="text" id="prog1" value="" placeholder="голы команды 1"> 
 
        </div> 
      </td> 
 
      <td> 
        <div> 
          <input type="text" id="prog2" value="" placeholder="голы команды 2"> 
 
        </div> 
      </td> 
      <td>Нэшвилл</td> 
    </tr> 
 
    <tr> 
 
      <td> <b>Результат  </b> Питтсбург</td> 
      <td> 
        <div> 
          <input type="text" id="res1" value="" placeholder="голы команды 1"> 
 
        </div> 
      </td> 
 
      <td> 
        <div> 
          <input type="text" id="res2" value="" placeholder="голы команды 2"> 
 
        </div> 
      </td> 
      <td>Нэшвилл</td> 
    </tr> 
 
    <tr> 
      <td> 
        <div> 
 
          <a href="#" onclick='ballResult()' class="submit">Рассчитать</a> 
        </div> 
 
      </td> 
    </tr> 
 
    <tr> 
      <td> 
        <div class="form-group"> 
 
          Очки <output id="result"></output> 
        </div> 
 
      </td> 
    </tr> 
 
  </table> 
 
</div>

Формула начисления очков должна начислять очки исходя из установленных условий:

    за 1 матч можно получить максимум 9 очков, минимум - 0 очков.
    1. Если игрок угадал исход матча (выигрыш, ничья или поражение), то ему начисляются очки в диапазоне от 3 до 9. Чем точнее прогноз к результату матча, тем очков больше.
    2. Игрок получает 1 очко при не угаданном исходе, если он получил за матч 2,5 штрафных балла (ШБ - как они рассчитываются см.ниже под спойлером).
    3. В остальных случаях очки за матч не начисляются.
    При угаданном исходе игрок может получить 9, 7, 6, 5, 4, или 3 очка в зависимости от количества штрафных баллов (заданы диапазоном) в соответствии со следующей таблицей:
    -----------------
       Штраф    Очки
    -----------------
        0        9  (угадан счет)
     2 - 2,5     7
      4 - 6      6
    6.5 - 9      5
    9.5 - 12     4
       >12       3
    -----------------
    Вот примеры начисления очков с которыми можно сверятся:
    Прогноз   Результат   Очки
      3-2        3-2        9    (угадан счет матча)
      3-2        4-3        7    (угадан исход, количество ШБ = 2)
      3-3        4-4        7    (угадан исход, количество ШБ = 2)
      3-2        4-2        7    (угадан исход, количество ШБ = 2,5)
      3-2        5-4        6    (угадан исход, количество ШБ = 4)
      3-3        5-5        6    (угадан исход, количество ШБ = 4)
      3-2        5-3        6    (угадан исход, количество ШБ = 4,5)
      3-2        5-2        6    (угадан исход, количество ШБ = 5)
      3-2        4-1        6    (угадан исход, количество ШБ = 5)
      3-2        6-5        6    (угадан исход, количество ШБ = 6)
      3-3        6-6        6    (угадан исход, количество ШБ = 6)
      3-2        6-4        5    (угадан исход, количество ШБ = 6,5)
      3-2        6-3        5    (угадан исход, количество ШБ = 7)
      3-2        6-2        5    (угадан исход, количество ШБ = 7,5)
      3-2        4-0        5    (угадан исход, количество ШБ = 7,5)
      3-2        7-6        5    (угадан исход, количество ШБ = 8)
      3-3        7-7        5    (угадан исход, количество ШБ = 8)
      3-2        7-5        5    (угадан исход, количество ШБ = 8,5)
      3-2        7-4        5    (угадан исход, количество ШБ = 9)
      3-2        7-3        4    (угадан исход, количество ШБ = 9,5)
      3-2        7-2        4    (угадан исход, количество ШБ = 10)
      3-3        8-8        4    (угадан исход, количество ШБ = 10)
      3-2        8-6        4    (угадан исход, количество ШБ = 10,5)
      3-2        8-5        4    (угадан исход, количество ШБ = 11)
      3-2        8-4        4    (угадан исход, количество ШБ = 11,5)
      3-3        9-9        4    (угадан исход, количество ШБ = 12)
      3-2        8-2        3    (угадан исход, количество ШБ >12)
      3-3       10-10       3    (угадан исход, количество ШБ > 12)
      3-2       14-1        3    (угадан исход, количество ШБ > 12)
      3-2        3-3        1    (исход не угадан, количество ШБ = 2,5)
      4-4        3-4        1    (исход не угадан, количество ШБ = 2,5)
      2-0        1-2        0    (исход не угадан, количество ШБ > 2,5)
      3-3        4-2        0    (исход не угадан, количество ШБ > 2,5)
Формула, которая сейчас прописана в коде частично начисляет очки с ошибками. То есть угаданный счет и ошибку в 1 отклонение она считает правильно. Но остальное не правильно ( в частности не учитывает угаданный/не угаданный исход. 
В javascript знаком поверхностно.Надеюсь на вашу доброту.
READ ALSO
Хранение в массиве переменных

Хранение в массиве переменных

Могу ли я хранить в games для каждой игры свои переменные со значениями id_game и href_game?

228
Как выполнить POST запрос на бэке?

Как выполнить POST запрос на бэке?

Как выполнить POST запрос на бэке на другой бэк и получить response? (аналог fetch на фронте)

207
Перебор объектов массива

Перебор объектов массива

Есть массив объектовИз него нужно получить сумму полей price только из тех объектов у которых paid === true и pass совпадает с pass из первого объекта...

173