Для сегодняшнего алгоритма мы собираемся создать функцию с именем 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, которые вы можете проверить.