@kirillleogky

Tetris Series #1 — Scoring System?

Подскажите с данной катой


Мой код:
function getScore(arr) {
 const points = {
  0 : 0,
  1 : 40,
  2 : 100,
  3 : 300,
  4 : 1200,
 }
 let number = 0;
 let counting = 0;
 let level = 1;
 for (let i = 0; i < arr.length; i++) {
  if (counting >= 10) {
   level++;
   counting = 0;
   counting += arr[i];
   number += (points[arr[i]] * level);
  } else {
   counting += arr[i];
   number += (points[arr[i]] * level);
  }
 }
 return number;
}



Мозг слабо уже соображает, почему когда у меня вызывается функция с таким массивом - [1, 4, 3, 3, 1, 2, 3, 4, 4, 0, 1, 4, 2, 3, 4, 4, 4, 2, 2, 1, 4, 3, 1, 2, 0, 3, 1, 1, 1, 3, 1, 2, 4, 1, 0, 4, 4, 2, 0, 1, 3, 2, 2], то '' expected 78640 to equal 83560 '' или [3, 0, 3, 2, 2, 1, 0, 4, 0, 4, 2, 0, 2, 1, 4, 0, 1, 2, 0, 2, 1, 0, 1, 2, 2, 1, 4, 1, 4, 3, 3, 2, 3, 0, 4, 2, 3, 3, 0, 0, 0, 4, 3, 3, 2, 4, 1] - '' expected 64360 to equal 69660 '' ?
  • Вопрос задан
  • 145 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
if (counting >= 10) {
   level++;
   counting = 0;

Разница между 10 и counting (кроме 10, может принимать значения 11, 12 или 13) теряется - поэтому ваши результаты меньше ожидаемых. Может, не стоит считать каждую десятку отдельно? - сложновато как-то. Сделайте общую сумму, а на каждой итерации делите её на 10:

function getScore(arr) {
  const points = [ 0, 40, 100, 300, 1200 ];

  let score = 0;
  let lines = 0;

  for (const n of arr) {
    score += points[n] * (1 + (lines / 10 | 0));
    lines += n;
  }

  return score;
}
Ответ написан
Комментировать
twobomb
@twobomb
function getScore(arr) {  
 var scores = [40,100,300,1200];
 var cleared = 0;
 var score = 0;
  arr.forEach((el)=>{
      if(el != 0){
        var level = parseInt(cleared/10);
        score+= scores[el-1] + (scores[el-1]*level);
        cleared+=el;
      } 
 });
 return score;
}


P.S. В вашем коде поменять
counting = 0;
на
counting -= 10;
и в принципе должно заработать
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы