Професионална програма
Loading...
+ Нов въпрос
sasho91 avatar sasho91 15 Точки

JS Fundamentals Ladybugs 50/100

Здравейте, опитвам се да реша задача Ladybugs от Arrays Exercise. Всички тестове от примера минават, но в Judge го докарвам само до 50/100. 

Задачата може да намерите тук: https://softuni.bg/trainings/resources/officedocument/49611/arrays-exercise-js-fundamentals-may-2020/2832 . 

Ще се радвам на съвет как мога да взема останалите точки.

Ето кода ми: https://pastebin.com/6vYHaMMm

 

Благодаря! 

0
JavaScript Fundamentals
MartinBG avatar MartinBG 2783 Точки
Best Answer

Не валидирате първоначалните индекси на калинките - възможно е да има такива, които са извън зададения размер на полето:

    for (const position of bugsPosition) {
        let currentBug = Number(position)
        if (currentBug < 0 || currentBug >= fieldSize) { // валидация
           continue;
        }
        finalBugsArray[currentBug] = 1;
    }

 

Използвате малко по-сложна логика от необходимото, както за инициализиране на полето, така и за преместване на калинките.

Ето алтернативно решение:

function ladybugs(array) {
  let workingArray = array.slice();
  let fieldSize = workingArray.shift();
  let bugsPosition = workingArray.shift().split(' ');
  let finalBugsArray = new Array(fieldSize).fill(0);

  for (const position of bugsPosition) {
    let currentBug = Number(position);
    if (currentBug < 0 || currentBug >= fieldSize) {
      continue;
    }
    finalBugsArray[currentBug] = 1;
  }

  for (let i = 0; i < workingArray.length; i++) {
    let [ladybugIndex, command, jumpLength] = workingArray[i].split(' ');

    ladybugIndex = Number(ladybugIndex);

    if (ladybugIndex < 0 || ladybugIndex >= finalBugsArray.length || finalBugsArray[ladybugIndex] !== 1) {
      continue;
    }

    // Free Position
    finalBugsArray[ladybugIndex] = 0;

    jumpLength = Number(jumpLength);
    
    if (command === 'left') {
      jumpLength = -jumpLength;
    }

    ladybugIndex += jumpLength;
    while (ladybugIndex >= 0 && ladybugIndex < finalBugsArray.length) {
      if (finalBugsArray[ladybugIndex] === 0) {
        finalBugsArray[ladybugIndex] = 1;
        break;
      }
      ladybugIndex += jumpLength;
    }
  }

  console.log(finalBugsArray.join(' '));
}

 

0
02/07/2020 20:48:05
sasho91 avatar sasho91 15 Точки

Много благодаря за насоките и алтернативното решение! Със сигурност е доста по-опростено. :) 

1