Оптимизация кода тенниса

173
21 января 2019, 02:10

Хочу проверить верный ли счет в теннисе.
В теннисе сет заканчивается, когда один из игроков выигрывает 6 игр, а другой выигрывает меньше 5 или, если оба игрока выиграют как минимум 5 игр и пока один из игроков не выиграет 7 игр.
Надо определить попал ли в функцию правильный счет.

console.log(tennis(3, 6))//надо true 
console.log(tennis(8, 5))//тут false 
console.log(tennis(6, 5))//и тут false 
 
function tennis(score1,score2){ 
    if(score1 == 7 && score2 == 5|| score1 == 5 && score2 == 7){ 
     return true; 
    }if(score1 == 7 &&score2 == 6 || score1== 6 && score2 == 7){ 
       return true; 
    } 
    if(score1 == 6 && score2 < 5||score1 <5 && score2 == 6){ 
      return true;}if(score1== 6&&score2 ==6){ 
    return true; 
    } 
    return false; 
}

Answer 1

По сути можно проверять выигрышный результат для 6 и 7 для одного из счетов и при этом проверять соответствует ли условию второй счет.

Вот так:

// если один из счетов равен 6(выигрышный счет), 
// то проверить второй счет. В данном случае надо проверить на < 5
if (score1 == 6) return score2 < 5
if (score2 == 6) return score1 < 5

Но этот код должен быть под следующим кодом чтобы для счета 6 и 7 или 7 и 6 выдавало правильный результат.

Для 7 немного посложнее, надо проверить что другой счет больше 5 и меньше 7. Счета 7 и 7 не может быть, кто первый набрал 7, тот и выиграл.

if (score1 == 7) return score2 >= 5 && score2 < 7
if (score2 == 7) return score1 >= 5 && score1 < 7

Код if (score1== 6 && score2 == 6) { вроде вообще не имеет смысла, Вы писали:

или если оба игрока выиграют как минимум 5 игр и пока один из игроков не выиграет 7 игр.

тот и тот набарали больше 5 но никто не набрал 7, поэтому надо false.

Вот полный код:

console.log(tennis(3, 6))//надо true 
console.log(tennis(8, 5))//тут false 
console.log(tennis(6, 5))//и тут false 
 
function tennis (score1, score2) { 
    if (score1 == 7) return score2 >= 5 && score2 < 7 
    if (score2 == 7) return score1 >= 5 && score1 < 7 
    if (score1 == 6) return score2 < 5 
    if (score2 == 6) return score1 < 5 
     
    return false 
}

Можно решить еще круче если использовать Math.min и Math.max чтобы определить меньший и больший счет, не нужно будет делать столько проверок:

console.log(tennis(3, 6))//надо true 
console.log(tennis(8, 5))//тут false 
console.log(tennis(6, 5))//и тут false 
 
function tennis (a, b) { 
    const max = Math.max(a, b) 
    const min = Math.min(a, b) 
 
    return (max == 6 && min < 5) || 
        (max == 7 && min != 7 && min >= 5) 
}

READ ALSO
Win 7x64, Sublime Text 3 &amp; Babel =&gt; не транспайлит в ES5

Win 7x64, Sublime Text 3 & Babel => не транспайлит в ES5

Проблему я собственно описал в заголовкеПосмотрел кучу видео, делаю все как там, почитал официальную документацию, насколько смог её понять...

170
Нет доступа в Одноклассники с блока &ldquo;Поделиться&rdquo;

Нет доступа в Одноклассники с блока “Поделиться”

Я разрабатываю сайтДоменное имя сайта knitting-master

157
Возрват массива из JSON.parse()

Возрват массива из JSON.parse()

Я пытаюсь сохранить информацию о пикселях в localStorage с помощью getImageDataСам объект вроде сохраняется, но как считать значения обратно?

177
Гравитация на нативном JavaScript

Гравитация на нативном JavaScript

Как организовать гравитацию на js , то есть объект прыгает и приземляется на землю

197