Быстрее, выше, сильнее


#1

Глючит проверка. Вызываю @GreenLera
Первый тест. Список показателей — [“выносливость”,“скорость”,“ловкость”,“гибкость”,“сила”], уровни характеристик — [7,12,5,15,11], время тренировки — 60. Ожидаю результат: [7,12,5,18,11]

Ваше значение levels равное [7,12,5,17,11] не совпадает с ожидаемым значением [7,12,5,18,11].

хотя в условии

Если тренировка от 30 минут (не включая это значение) до одного часа (включая это значение), увеличивай гибкость на 2.

Скорей всего опечатка


#2

Здравствуйте. Да, была опечатка, мы её уже исправили. Проверяйте)


#3

Решила таким образом, но хотелось бы знать, может у кого-нибудь получилось более лаконичное решение?

Summary
var indicators = ['сила', 'гибкость', 'выносливость', 'скорость', 'ловкость'];
var levels = [8, 15, 9, 12, 11];
var trainingTime = 30;

 if(trainingTime <= 30) {
  levels[indicators.indexOf('скорость')] += 3;
  levels[indicators.indexOf('ловкость')] += 3;
    }
  else if(trainingTime > 30 && trainingTime <= 60) {
    levels[indicators.indexOf('гибкость')] += 3;
    }
  else if(trainingTime > 60) { 
    levels[indicators.indexOf('сила')] += 2;
    levels[indicators.indexOf('выносливость')] += 2;
}

#4

Вот мой вариант, через if и for

Summary
var indicators = ['сила', 'гибкость', 'выносливость', 'скорость', 'ловкость'];
var levels = [8, 15, 9, 12, 11];
var trainingTime = 30;

if (trainingTime <= 30) {
  for (var i = 0; i < indicators.length; i++){
    if (indicators[i] == 'скорость' || indicators[i] == 'ловкость') {
      levels[i] += 3;
    }
  }
} else if (trainingTime > 30 && trainingTime <= 60) {
  for (var i = 0; i < indicators.length; i++){
    if (indicators[i] == 'гибкость') {
      levels[i] += 3;
    }
  }
} else if (trainingTime > 60) {
  for (var i = 0; i < indicators.length; i++){
    if (indicators[i] == 'сила' || indicators[i] == 'выносливость') {
      levels[i] += 2;
    }
  }
}

#5

Я не приследовал лаконичность, но:
var power = indicators.indexOf(‘сила’);
var flexibility = indicators.indexOf(‘гибкость’);
var endurance = indicators.indexOf(‘выносливость’);
var speed = indicators.indexOf(‘скорость’);
var agility = indicators.indexOf(‘ловкость’);

if (trainingTime<=30){
levels[speed]+=3;
levels[agility]+=3;
}else if(trainingTime<=60){
levels[flexibility]+=3;
}else if(trainingTime>60){
levels[power]+=2;
levels[endurance]+=2;
}


#6

Сами условия можно записать проще:

if (trainingTime <= 30) {
...
} else if (trainingTime <= 60) {
...
} else {
...
}

#7

Решил тоже через цикл, который использовал один раз:

Summary
for (var i = 0; i < levels.length; i++) {
  if (trainingTime <= 30) {
    if (indicators[i] === 'скорость' || indicators[i] === 'ловкость') {
      levels[i] += 3;
    }
  } else if (trainingTime <= 60) {
    if (indicators[i] === 'гибкость') {
      levels[i] += 3;
    }
  } else {
    if (indicators[i] === 'сила' || indicators[i] === 'выносливость') {
      levels[i] += 2;
    }
  }
}

#8

А я почему то через функцию сделал.

var indicators = [‘сила’, ‘гибкость’, ‘выносливость’, ‘скорость’, ‘ловкость’];
var levels = [8, 15, 9, 12, 11];
var trainingTime = 30;

var findIndex = function (indicator) {
for (var i = 0; i < indicators.length; i++ ) {
if (indicators[i].indexOf(indicator) !== -1) {
return i; }}};

if (trainingTime <= 30) {
levels[findIndex(‘скорость’)] +=3;
levels[findIndex(‘ловкость’)] +=3;
}
if (trainingTime > 30 && trainingTime <= 60) {
levels[findIndex(‘гибкость’)] +=3;
}
if (trainingTime > 60) {
levels[findIndex(‘сила’)] +=2;
levels[findIndex(‘выносливость’)] +=2;
}


#9

Сначала нагородил кучу переменных, искал индексы, мудрил ппц, потом подсмотрел у Jankelbrod , как она находила индексы и все стало на свои места , но на самом деле мудрил из за непонимания работы indexOf с массивами, т.к. было объяснение только по поводу работы со строкой этой функции ,потом разобрался…

Быстрее, выше, сильнее
console.log('Программ "Быстрее, выше, сильнее" by Nerealist');

var indicators = ['сила', 'гибкость', 'выносливость', 'скорость', 'ловкость'];
var levels = [8, 15, 9, 12, 11];
var trainingTime = 30;
console.log('Ваши характеристики соответственно : ' + indicators + ' ' + levels);

if (trainingTime <= 30) {
  levels[indicators.indexOf('скорость')] += 3;
  levels[indicators.indexOf('ловкость')] += 3;
}else if (trainingTime > 30 && trainingTime <= 60) {
  levels[indicators.indexOf('гибкость')] += 3;
}else {
  levels[indicators.indexOf('сила')] += 2;
  levels[indicators.indexOf('выносливость')] += 2;
}

console.log('Ваши характеристики после тренировки длительность ' + trainingTime + ' мин, Сэр : ' + levels);

#10

У меня по ходу самое Не лаконичное решение получилось((

if (trainingTime <= 30) {
  
  for (i = 0; i <= indicators.length - 1; i ++) {

if (indicators[i] == 'скорость') {
  levels[i] += 3;
  }
 if (indicators[i] == 'ловкость') {
  levels[i] += 3;
  }
}
  }
if (trainingTime > 30 && trainingTime <= 60) {
  
  for (i = 0; i <= indicators.length - 1; i ++) {

if (indicators[i] == 'гибкость') {
  levels[i] += 3;
  }
}
  }
  
if (trainingTime > 60) {
  
  for (i = 0; i <= indicators.length - 1; i ++) {

if (indicators[i] == 'сила') {
  levels[i] += 2;
  }
   if (indicators[i] == 'выносливость') {
  levels[i] += 2;
  }
}
  }

#11

Видимо надо использовать indexOf, но мы использовали его только со строками, но не с массивами…

Сводка

var indicators = [‘сила’, ‘гибкость’, ‘выносливость’, ‘скорость’, ‘ловкость’];
var levels = [8, 15, 9, 12, 11];
var trainingTime = 45;

var levelUp = 0;
var firstSkill = ‘’;
var secondSkill = ‘’;

if (trainingTime <= 30) {
levelUp = 3;
firstSkill = ‘скорость’;
secondSkill = ‘ловкость’;
} else if (trainingTime > 30 && trainingTime <= 60) {
levelUp = 3;
firstSkill = ‘гибкость’;
} else if (trainingTime > 60) {
levelUp= 2;
firstSkill = ‘сила’;
secondSkill = ‘выносливость’;
}

for (var i = 0; i < indicators.length; i ++) {
console.log(indicators[i], firstSkill);
if ((indicators[i] === firstSkill) || (indicators[i] === secondSkill)) {
levels[i] += levelUp;
}

}


#12

Немного громоздко вышло

Сводка

var indicators = [‘сила’, ‘гибкость’, ‘выносливость’, ‘скорость’, ‘ловкость’];
var levels = [8, 15, 9, 12, 11];
var trainingTime = 30;
var p = ‘сила’;
var f = ‘гибкость’;
var st = ‘выносливость’;
var sp = ‘скорость’;
var a = ‘ловкость’;

for (var i=0; i<indicators.length; i++){
if (trainingTime <= 30 && (indicators[i].indexOf(sp)>=0 || indicators[i].indexOf(a)>=0)){
levels[i]+=3;
}
if ((trainingTime > 30 && trainingTime <= 60) && indicators[i].indexOf(f)>=0){
levels[i]+=3;

}
if (trainingTime > 60 && (indicators[i].indexOf§>=0 || indicators[i].indexOf(st)>=0)){
levels[i]+=2;
}
}


#13

решил отказаться от цикла в этом решении, но с циклом тоже можно интересно сделать:

var indicators = ['сила', 'гибкость', 'выносливость', 'скорость', 'ловкость'];
var levels = [8, 15, 9, 12, 11];
var trainingTime = 30;

  if (trainingTime <= 30) {
    levels[indicators.indexOf('скорость')] += 3;
    levels[indicators.indexOf('ловкость')] += 3;
  } else if (trainingTime > 30 && trainingTime <= 60) {
    levels[indicators.indexOf('гибкость')] += 3;
  } else  if (trainingTime > 60) {
    levels[indicators.indexOf('сила')] += 2;
    levels[indicators.indexOf('выносливость')] += 2;
}