Как я могу определить, быстрее ли считать вниз или вверх?
Я пытаюсь сделать функцию isCountDownFaster(from, to, max);
кто должен возвращать истину / ложь, но я много борюсь с математикой, кто-то может дать быструю руку?
0, 1 ... 32, from, 34 ... 66, to, 68 ... 98, max
Итак, как я могу определить из этого ^, если это быстрее, чтобы считать вниз или считать от точки "от" до точки "до"? и я на 99% уверен, что есть уравнение, чтобы сделать это без использования цикла и дюжины строк кода.
например, isCountDownFaster должен определить, считается ли этот путь
33, 32, 31, ... 2, 1, 0, 99, 98, ... 69, 68, 67
будет быстрее, чем делать это
33, 34, 35, ... 65, 66, 67
который в этом случае должен вернуться false
,
1 ответ
Эта функция предполагает, что from
, to
а также max
все неотрицательные и что from
а также to
меньше или равно max
, from
а также to
также могут сравняться друг с другом. Это способствует прямой итерации от from
в to
итерации путем обтекания массива в случае, если они равны по длине в любом направлении.
Если from
равно to
, isCountDownFaster
всегда будет возвращать ложь, потому что to >= from
равно true
, делая ascend
равно true
, а также direct <= around
будет равен true
а так как direct
равно 0
,
function isCountDownFaster(from, to, max) {
var ascend = to >= from,
direct = Math.abs(to - from),
around = max - direct;
return !!((direct <= around) ^ ascend);
}
!!((direct <= around) ^ ascend)
можно объяснить так:
direct <= around | ascend | isCountDownFaster
-----------------|--------|------------------
false | false | false
false | true | true
true | false | true
true | true | false
Вот несколько тестов, чтобы подтвердить, что это работает:
function isCountDownFaster(from, to, max) {
var ascend = to >= from,
direct = Math.abs(to - from),
around = max - direct;
return !!((direct <= around) ^ ascend);
}
console.log(
'from: %d\nto: %d\nmax: %d\nisCountDownFaster: %s\n',
5, 95, 100, isCountDownFaster(5, 95, 100)
);
console.log(
'from: %d\nto: %d\nmax: %d\nisCountDownFaster: %s\n',
95, 5, 100, isCountDownFaster(95, 5, 100)
);
console.log(
'from: %d\nto: %d\nmax: %d\nisCountDownFaster: %s\n',
45, 55, 100, isCountDownFaster(45, 55, 100)
);
console.log(
'from: %d\nto: %d\nmax: %d\nisCountDownFaster: %s\n',
55, 45, 100, isCountDownFaster(55, 45, 100)
);
Проверьте консоль разработчика, чтобы увидеть эти результаты.