Замена - вызов алгоритма Codewars - PullRequest
0 голосов
/ 11 апреля 2020

Этот вызов Codewars просит вас

Выберите ровно один элемент из последовательности и замените его другим целым числом> 0. Нельзя заменять число на себя или вообще не изменять число.

Мой мыслительный процесс состоит в том, чтобы отсортировать входной массив от наименьшего к наибольшему, добавить 1 в начало, а затем удалить наибольший элемент из массива. Это должно привести к наименьшей возможной последовательности, поскольку я в основном меняю наибольший элемент на 1.

Примеры:

([1,2,3,4,5]) => [1,1,2,3,4]

([4,2,1,3,5]) => [1,1,2,3,4]

([2,3,4,5,6]) => [1,2,3,4,5]

([2,2,2]) => [1,2,2]

([42]) => [1]

Я пытался:

function replacement(a){
  let sorted = a.sort((a, b) => a - b);
  sorted.unshift(1);
  return sorted.slice(0, sorted.length -1);
}

console.log(replacement([2,3,4,5,6]));

, который работает для упомянутых выше тестов, но, похоже, не работает 2 / 109.

wrong answer in test a=[1,1,1,1] - Expected: [1, 1, 2], instead got: [1, 1, 1]
wrong answer in test a=[1,1] - Expected: [2], instead got: [1]

Я не понимаю, почему мой код не проходит эти тесты - Codewars не показывает последовательность ввода для тестов, которые не проходят. Любые идеи? Спасибо.

enter image description here

1 Ответ

1 голос
/ 11 апреля 2020

Как указал @vivek, я просто пропустил проверку, чтобы проверить, не является ли максимум 1. Если это так, мне просто нужно заменить его на 2, вот и все.

function replacement(a){
  let sorted = a.sort((a, b) => a - b);
  if (sorted[sorted.length - 1] === 1){
    sorted.pop();
    sorted.push(2);
    return sorted;
  }
  sorted.unshift(1);
  return sorted.slice(0, sorted.length -1);
}

console.log(replacement([1, 1, 1, 1]));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...