Для сегодняшнего алгоритма мы собираемся создать функцию с именем catAndMouse, которая будет принимать три целых числа: x, y и z в качестве входных данных.

Есть две кошки, кошка A и кошка B, и мышь. Они находятся в разных позициях на линии. Одна из кошек хочет мышь, поэтому каждая из них пытается первой добраться до нее. Предположим, что мышь не движется, а кошки движутся с одинаковой скоростью. Учитывая начальные позиции мыши и кошек, цель этой функции - вывести, какая кошка первой доберется до мыши.

Если кошка A первой доберется до мыши, функция выдаст Cat A. Если кошка B первой доберется до мыши, функция выдаст Cat B. Если обе кошки поймают мышь одновременно, ни одна из них не получит мышь. Функция выведет Mouse C. Мышь убегает, пока две кошки спорят друг с другом.

Приведем пример:

let x = 2; // starting position of cat A
let y = 6; // starting position of cat B
let z = 3; // position of mouse

Учитывая положение каждого животного, мы сосредоточимся на расстоянии между кошкой A и мышью, кошкой B и мышью.

Если мы вычтем расстояние между мышью и кошкой A, 3 — 2 = 1, мы увидим, что кошка A находится на расстоянии 1 (единицы измерения здесь не имеют значения) от мыши.

Если мы посмотрим на расстояние между мышью и кошкой B, 3 — 6 = -3, если мы проигнорируем здесь негативы, мы увидим, что кошка B находится на 3 расстояниях от мыши.

Имея эту информацию, мы видим, что кошка A ближе к мыши. Кот А первым доберется до мыши. Следовательно, функция выведет cat A.

Возьмем другой пример:

let x = 2; // starting position of cat A
let y = 4; // starting position of cat B
let z = 3; // position of mouse

Этот пример такой же, как и предыдущий, но единственное значение, которое я изменил, - это начальная позиция для кошки B. Из нашего предыдущего примера мы знаем, что кошка A находится на 1 расстоянии от мыши. Если посчитать расстояние от кошки B и мыши, 3 — 4 = -1. Рассматривая ответ как абсолютное значение, расстояние также равно 1. Поскольку и кошка A, и кошка B достигают мыши одновременно, мышь ускользает, и функция выводит Mouse C.

Давайте превратим это в код:

let catAPos = Math.abs(z - x);
let catBPos = Math.abs(z - y);

Переменная catAPos - это то, что будет удерживать расстояние между котом A и мышью. Мы вычитаем x, положение кота A, из z, положение мыши. Мы используем метод Math.abs (), который выводит абсолютное значение ответа.

Переменная catBPos такая же, как переменная catAPos, но разница в том, что эта переменная содержит расстояние между котом B, y и мышью, z.

Теперь сравним значения:

if (catAPos < catBPos) {
    return "Cat A";
} else if (catBPos < catAPos) {
    return "Cat B";
} else {
    return "Mouse C";
}

В нашем if-выражении наше первое условие проверяет, меньше ли расстояние между котом A и мышью, чем расстояние между котом B и мышью. Если это правда, кошка А первой поймала мышь. Функция выведет Cat A.

Если расстояние между кошкой B и мышью меньше, чем расстояние между кошкой A и мышью, это означает, что кошка B первой поймала мышь. Функция выведет Cat B.

Если ни один из них не соответствует действительности, это означает, что обе кошки достигли мыши одновременно. Кошки сталкиваются друг с другом, и мышь убегает. Функция выведет Mouse C.

На этом наш алгоритм и функция завершены. Вот остальной код:

function catAndMouse(x, y, z) {
    let catAPos = Math.abs(z - x);
    let catBPos = Math.abs(z - y);
    if (catAPos < catBPos) {
        return "Cat A";
    } else if (catBPos < catAPos) {
        return "Cat B";
    } else {
        return "Mouse C";
    }
}

Вот некоторые из моих других проблем с алгоритмами JavaScript, которые вы можете проверить.