Нужна помощь, я его даже начать не могу [найти команду победителя для конкретной суперсерии]

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

Можно использовать функцию [Math.sign]

Слушай, ну принцип тот же, что и здесь

Нужно пройти по всем элементам массива, посчитать кто выиграл на каждом шаге, сложить данные во временную переменную (или две) и в конце посмотреть: кто из них больше выиграл, такую строку и вернуть. Ну или null, если ничья.

1 лайк

все равно если честно не понял(((

Нужно попробовать разбить задачу на несколько итераций. А потом их оптимизировать.
Например в этом случае

  1. Пройтись по массиву и заменить каждый элемент на результат игры. Получится новый одномерный массив с данными.

Для этого можно использовать как раз функцию Math.sign, в которую передать разность результатов.
для первого элемента это будет Math.sign(3-7) // -1
для второго элемента Math.sign(4-1) // 1
и т.д. В случае ничьей Math.sign(3-3) // 0
Получим результат типа [-1,1 … 1, -1]

  1. Дальше нам нужно просуммировать эти элементы и по результату мы будем четко знать.
    Если > 0 победила 1 команда
    < 0 - 2 команда
    ===0 - ничья
1 лайк

const getSuperSeriesWinner = (scores) => {
let array = [[], []];
for (let i = 1; i < scores.length; i += 1) {
if
}
}
export default getSuperSeriesWinner;

все что написал…

Для начала неплохо.
Что ты будешь делать в if?
Для чего тебе let array = [[],[]]?

что там делать нужно?

Нужна помощь, я его даже начать не могу

Я тоже попробую. Кстати, задача отличная для начинающих, если можешь - передай тому кто ее придумал что они молодец.

Цель - смоделировать ситуацию где из набора счетов вычисляется новое знание о победе. Промежуточный шаг саккумулировать победы разых команд. Конечный шаг сравнить результаты аккумуляции.

Вопрос который нужно себе задать в голове - каким образом смоделировать в программе победы. Например матч смоделирован как [X, Y]. Победы можно смоделировать как [Y, Z] с той же логикой что первое число - количество побед команды 1, второе - команды 2. На этом этапе у тебя есть куча вариантов как именно смоделировать явления, то есть массив не единственная возможная форма. Например можно просто завести 2 переменные. Или завести объект типа {canada: 0, ussr: 0}. Без опыта обычно не понять какой подход моделированию более удобный, но прелесть этой задачи что тут все равно какой подход выберешь. Поэтому выбирай то с чем более опытен и с учетом следующего шага.

Следующий шаг это задать себе вопрос как получить из входных данных эту промежуточные данные. Плюс-минус ходы будут одинаковые: нужно циклом пройтись по результатам матчей, понять по счету кто выиграл и увеличить количество выигрышей для той команды. Если выбрали моделировать как переменные, то инкрементируй их, если как массив, то меняй соответствующее значение массива.

И вишенка на торте. В результате есть 2 места с количеством выигрышей, используя их, верни нужное значение.

2 лайка

эхх понять бы еще как это сделать(((

Сам должен додуматься, вот всё что тебе необходимо знать:
Переменные - Переменные

Функции - Функции

Операторы сравнения - Операторы сравнения.

Перебор массива - Все способы перебора массива в JavaScript / Хабр

Но если у тебя нет желания научиться, а нужно только решение, то так и напиши

1 лайк

Смотри на похожие решения, желательно написанные на уже известных механиках (циклы-переменные), пробуй копировать элементы решений, играться с ними. Понимание придет только через цикл

“Поставить цель, прикинуть что нужно сделать для достижения цели” → “Попробовать сделать” → “Сравнить результат с целью” → “Поменять подход, цель, методы” и начать с начала.

2 лайка

Можно это как-то еще укоротить?

getSuperSeriesWinner=s=>(r=s.reduce((s,a)=>a[0]>a[1]?++s:a[0]<a[1]?--s:s,0))>0?"canada":r<0?"ussr":null

console.log(getSuperSeriesWinner([[1,2],[2,3],[3,4],[3,2],[1,1],[2,2],[2,1],[4,1],[3,1]]) === 'canada')
console.log(getSuperSeriesWinner([[1,2]]) === 'ussr')
console.log(getSuperSeriesWinner([[1,2],[1,1],[2,2],[2,1]]) === null)
1 лайк

Так нельзя к сожалению

Можно решение…?

У меня чуть длиннее вышло, но не так зловеще ))

<!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>
1 лайк

СПАСИБО БОЛЬШОЕ!!!

Есть куда проще способ.

const getSuperSeriesWinner = (scores) => {
let result = 0;
for (const score of scores) {
result += Math.sign(score[0] - score[1]);
}
if (result > 0) {
return ‘canada’;
}
if (result < 0) {
return ‘ussr’;
}
return null;
}
export default getSuperSeriesWinner;

Интересное решение. У меня возникает вопрос социального характера. Как объяснить умным членам команды, но которые последний раз трогали синусы-косинусы в школе что этот код работает и работает корректно?