Реализуйте и экспортируйте по умолчанию функцию, которая находит команду победителя для конкретной суперсерии. Победитель определяется как команда, у которой больше побед (не количество забитых шайб) в конкретной серии. Функция принимает на вход массив, в котором каждый элемент — это массив, описывающий счет в конкретной игре (сколько шайб забила Канада и СССР). Результат функции – название страны: 'canada' , 'ussr' . Если суперсерия закончилась в ничью, то нужно вернуть null .
import getSuperSeriesWinner from './superseries.js'
// Первое число – сколько забила Канада
// Второе число – сколько забила СССР
const scores = [
[3, 7], // Первая игра
[4, 1], // Вторая игра
[4, 4],
[3, 5],
[4, 5],
[3, 2],
[4, 3],
[6, 5],
];
getSuperSeriesWinner(scores); // 'canada'
Нужно пройти по всем элементам массива, посчитать кто выиграл на каждом шаге, сложить данные во временную переменную (или две) и в конце посмотреть: кто из них больше выиграл, такую строку и вернуть. Ну или null, если ничья.
Нужно попробовать разбить задачу на несколько итераций. А потом их оптимизировать.
Например в этом случае
Пройтись по массиву и заменить каждый элемент на результат игры. Получится новый одномерный массив с данными.
Для этого можно использовать как раз функцию Math.sign, в которую передать разность результатов.
для первого элемента это будет Math.sign(3-7) // -1
для второго элемента Math.sign(4-1) // 1
и т.д. В случае ничьей Math.sign(3-3) // 0
Получим результат типа [-1,1 … 1, -1]
Дальше нам нужно просуммировать эти элементы и по результату мы будем четко знать.
Если > 0 победила 1 команда
< 0 - 2 команда
===0 - ничья
const getSuperSeriesWinner = (scores) => {
let array = [[], []];
for (let i = 1; i < scores.length; i += 1) {
if
}
}
export default getSuperSeriesWinner;
Я тоже попробую. Кстати, задача отличная для начинающих, если можешь - передай тому кто ее придумал что они молодец.
Цель - смоделировать ситуацию где из набора счетов вычисляется новое знание о победе. Промежуточный шаг саккумулировать победы разых команд. Конечный шаг сравнить результаты аккумуляции.
Вопрос который нужно себе задать в голове - каким образом смоделировать в программе победы. Например матч смоделирован как [X, Y]. Победы можно смоделировать как [Y, Z] с той же логикой что первое число - количество побед команды 1, второе - команды 2. На этом этапе у тебя есть куча вариантов как именно смоделировать явления, то есть массив не единственная возможная форма. Например можно просто завести 2 переменные. Или завести объект типа {canada: 0, ussr: 0}. Без опыта обычно не понять какой подход моделированию более удобный, но прелесть этой задачи что тут все равно какой подход выберешь. Поэтому выбирай то с чем более опытен и с учетом следующего шага.
Следующий шаг это задать себе вопрос как получить из входных данных эту промежуточные данные. Плюс-минус ходы будут одинаковые: нужно циклом пройтись по результатам матчей, понять по счету кто выиграл и увеличить количество выигрышей для той команды. Если выбрали моделировать как переменные, то инкрементируй их, если как массив, то меняй соответствующее значение массива.
И вишенка на торте. В результате есть 2 места с количеством выигрышей, используя их, верни нужное значение.
Смотри на похожие решения, желательно написанные на уже известных механиках (циклы-переменные), пробуй копировать элементы решений, играться с ними. Понимание придет только через цикл
“Поставить цель, прикинуть что нужно сделать для достижения цели” → “Попробовать сделать” → “Сравнить результат с целью” → “Поменять подход, цель, методы” и начать с начала.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title></title>
<style>
</style>
<script>
/*
Реализуйте и экспортируйте по умолчанию функцию, которая находит команду победителя
для конкретной суперсерии. Победитель определяется как команда, у которой больше побед
(не количество забитых шайб) в конкретной серии. Функция принимает на вход массив, в
котором каждый элемент — это массив, описывающий счет в конкретной игре (сколько шайб
забила Канада и СССР). Результат функции – название страны: 'canada' , 'ussr' . Если
суперсерия закончилась вничью, то нужно вернуть null .
*/
// import getSuperSeriesWinner from './superseries.js'
// Первое число – сколько забила Канада
// Второе число – сколько забила СССР
const scores = [
[3, 7], // Первая игра USSR
[4, 1], // Вторая игра Canada
[4, 4],// -------- DRAW
[3, 5],// USSR
[4, 5],// USSR
[3, 2],// Canada
[4, 3],// Canada
[6, 5],// Canada
],
scores2 = [
[8, 0], // Canada
[8, 10],// USSR
[0, 4],// USSR
[0, 0]// ---- DRAW
];
/*
getSuperSeriesWinner(scores); // 'canada'
Можно использовать функцию [Math.sign]
*/
function getSuperSeriesWinner(arr){
let canada = 0,
ussr = 0;
arr.forEach( ([a, b]) => a != b ? a > b ? canada++ : ussr++ : '' );
return canada != ussr ? canada > ussr ? 'Canada' : 'USSR' : null;
}
console.log(getSuperSeriesWinner(scores));
console.log(getSuperSeriesWinner(scores2));
</script>
</head>
<body>
</body>
</html>
Интересное решение. У меня возникает вопрос социального характера. Как объяснить умным членам команды, но которые последний раз трогали синусы-косинусы в школе что этот код работает и работает корректно?
Я, немного формулировку не понял, но могу объяснить так как понял. Тут ведь дан метод Math.sign(). “Метод Math.sign() возвращает знак числа, указывающий на то, является ли число отрицательным, положительным или нулём”.