mc_moveZeroesToEnd_1K

Benchmark created on


Description

#todo написати функцію на будь-якій мові програмування, яка приймає масив чисел і повертає той самий масив, але з усіма нулями, переміщеними в кінець, зберігаючи порядок ненульових елементів.

Наприклад: [0, 1] => [1, 0] [0, 1, 0] => [1, 0, 0] [0, 1, 0, 3, 12] => [1, 3, 12, 0, 0] [0, 12, 0, 1, 3] => [12, 1, 3, 0, 0] */

Setup

const n = 1000;
const arr00000 = (argN) => new Array(argN).fill(0);
const arr00001 = (argN) => {
  const arr = new Array(argN).fill(0);
  arr[argN - 1] = 1;
  return arr;
};
const arr10000 = (argN) => {
  const arr = new Array(argN).fill(0);
  arr[0] = 1;
  return arr;
};
const arr11111 = (argN) => new Array(argN).fill(1);
const arr11110 = (argN) => {
  const arr = new Array(argN).fill(1);
  arr[argN - 1] = 0;
  return arr;
};
const arr01111 = (argN) => {
  const arr = new Array(argN).fill(1);
  arr[0] = 0;
  return arr;
};
const arr01010 = (argN) => {
  const arr = new Array(argN).fill(1);
  for (let i = 0; i < argN; i++) {
    if (i % 2 === 0) {
      arr[i] = 0;
    }
  }
  return arr;
};

Test runner

Ready to run.

Testing in
TestOps/sec
Volodymyr_v1
function moveZeroes(arr) {
  let tailPos = arr.length - 1;
  let startPos = 0;
  while (startPos < tailPos) {
    if (arr[startPos] === 0) {
      for (let j = startPos; j <= tailPos - 1; j++) {
        if(arr[j+1] !== 0) {
           [arr[j],arr[j+1]] = [arr[j+1], arr[j]];
        }
      }
      tailPos--;
    } else startPos++;
  }
  return arr;
}

moveZeroes(arr00000(n));
moveZeroes(arr00001(n));
moveZeroes(arr10000(n));
moveZeroes(arr11111(n));
moveZeroes(arr11110(n));
moveZeroes(arr01111(n));
moveZeroes(arr01010(n));
ready
Volodymyr_chatGPT
function moveZeroes(arr) {
    return arr.sort((a, b) => (a === 0 ? 1 : b === 0 ? -1 : 0));
}

moveZeroes(arr00000(n));
moveZeroes(arr00001(n));
moveZeroes(arr10000(n));
moveZeroes(arr11111(n));
moveZeroes(arr11110(n));
moveZeroes(arr01111(n));
moveZeroes(arr01010(n));
ready
DanielWright_v1
const moveZeroes = arr => 
  arr.sort((el) => el !== 0 ? -1 : 0);
  
moveZeroes(arr00000(n));
moveZeroes(arr00001(n));
moveZeroes(arr10000(n));
moveZeroes(arr11111(n));
moveZeroes(arr11110(n));
moveZeroes(arr01111(n));
moveZeroes(arr01010(n));
ready
Yura_v1
function moveZeroes(arr) {
  let currIdx = 0;

  for (let i = 0; i < arr.length; i++) {
    if (arr[i] !== 0) {
      arr[currIdx] = arr[i];
      ++currIdx;
    }
  }

  for (let i = currIdx; i < arr.length; i++) {
    arr[i] = 0;
  }

  return arr;
}

moveZeroes(arr00000(n));
moveZeroes(arr00001(n));
moveZeroes(arr10000(n));
moveZeroes(arr11111(n));
moveZeroes(arr11110(n));
moveZeroes(arr01111(n));
moveZeroes(arr01010(n));
ready
MCLtd_v1
function moveZeroes(argArray) {
  if (argArray.length === 1) {
    return argArray;
  }
  let indZero = argArray.indexOf(0);
  if (indZero === -1) {
    return argArray;
  }
  let ind = indZero + 1;
  while (ind < argArray.length) {
    if (argArray[ind] !== 0) {
      argArray[indZero] = argArray[ind];
      argArray[ind] = 0;
      indZero++;
    }
    ind++;
  }
  return argArray;
}

moveZeroes(arr00000(n));
moveZeroes(arr00001(n));
moveZeroes(arr10000(n));
moveZeroes(arr11111(n));
moveZeroes(arr11110(n));
moveZeroes(arr01111(n));
moveZeroes(arr01010(n));
ready
MCLtd_chatGPT
function moveZeroes(arr) {
    return arr.sort((a, b) => (a === 0) - (b === 0));
}

moveZeroes(arr00000(n));
moveZeroes(arr00001(n));
moveZeroes(arr10000(n));
moveZeroes(arr11111(n));
moveZeroes(arr11110(n));
moveZeroes(arr01111(n));
moveZeroes(arr01010(n));
ready
Yura_byVolodymyr
function moveZeroes(arr) {
  let currIdx = 0;
  let foundZero = false;
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] !== 0) {
      if (foundZero) {
        arr[currIdx] = arr[i];
      };
      ++currIdx;
    } else foundZero = true;
  }

  for (let i = currIdx; i < arr.length; i++) {
    arr[i] = 0;
  }
  return arr;
}

moveZeroes(arr00000(n));
moveZeroes(arr00001(n));
moveZeroes(arr10000(n));
moveZeroes(arr11111(n));
moveZeroes(arr11110(n));
moveZeroes(arr01111(n));
moveZeroes(arr01010(n));
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.