@LighterHLNN

Исправьте, пожалуйста, код на JS. Почему он не работает?

Было очень странное задание.
Вот само задание: В бесконечной последовательности чисел, вы можете взять последовательность до 50-ти,
сделать выборочность, вернее отсутствие чисел, в соответствии со следующим шагом: 2, 5, 1, 2
То есть, в последовательности должно будет отсутствовать каждое 2, 5, 1 и 2 числа

Вот код:
const arr1 = [];  
const arr2 = []; 
 
// Заполнить первый массив случайными числами 
for (let i = 0; i < 500; i++) arr1.push( Math.floor( Math.random() * (500 - 0 + 1) +500 ) ); 
// Заполнить второй массив 50 случайными числами из первого 
for (let i = 0; i < 50; i++) arr2.push(arr1[i]); 
 
let x = 0; 
let y = 0; 
 
// Циклично удалить каждый 2 5 1 2 элементы исходя от предыдущего элемента 
for (let k of arr2) { 
   x = 2 + y; 
   y = x; 
   delete arr2[x] 
   x = 5 + y; 
   y = x; 
   delete arr2[x] 
   x = 1 + y; 
   y = x; 
   delete arr2[x] 
   x = 2 + y; 
   y = x; 
   delete arr2[x] 
}

Почему он ничего не показывает... не понимаю
  • Вопрос задан
  • 119 просмотров
Пригласить эксперта
Ответы на вопрос 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Можно держать указатель на очередной элемент паттерна удаления.
И знать ближайшую следующую позицию под удаление.

В цикле идти по элементам исходного массива. Когда дошли до позиции под удаление, обновить указатель и следующую позицию, и никак не использовать значение. А иначе копировать текущий элемент в результат.
const arr = Array.from({ length: 50 }, (_, i) => i); // [0, 1, 2, 3, ... 49]
const pattern = [2, 5, 1, 2];
const result = [];

for (let i = 0, patternIndex = 0, toDeleteIndex = pattern[0] - 1; i < arr.length; i++) {
  if (i === toDeleteIndex) {
    patternIndex = (patternIndex + 1) % pattern.length; // 0, 1, 2, 3, 0, 1, 2, 3, ...
    toDeleteIndex += pattern[patternIndex];
  } else {
    result.push(arr[i]);
  }
}

console.log(result.join(', '));
// 0, 2, 3, 4, 5, 8, 10, 12, 13, 14, 15, 18, 20, 22, 23, 24, 25, 28, 30, 32, 33, 34, 35, 38, 40, 42, 43, 44, 45, 48
Такое задумывалось?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы