Реализуйте и экспортируйте по умолчанию функцию, которая находит команду победителя для конкретной суперсерии. Победитель определяется как команда, у которой больше побед (не количество забитых шайб) в конкретной серии. Функция принимает на вход массив, в котором каждый элемент — это массив, описывающий счет в конкретной игре (сколько шайб забила Канада и СССР). Результат функции – название страны: '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>
Интересное решение. У меня возникает вопрос социального характера. Как объяснить умным членам команды, но которые последний раз трогали синусы-косинусы в школе что этот код работает и работает корректно?